當前位置:首頁 » 編程語言 » c語言指向字元常量的指針
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言指向字元常量的指針

發布時間: 2022-07-09 23:24:59

c語言中關於字元串指針常量的問題

第一個:char *p = "123456";
char *s = "asdghh";
*s = *p;
你這個之所以會錯,是因為指針s指向的是常量字元串 asdghh 而*s=*p相當於改變常量字元串的值,常量是不能改變的,而且常量也不能做左值,所以出錯。
第二個:
char a[]="123456";//這個的意思是 在內存充開辟空間 把常量字元串復制到這個空間
char *p = a;//這個說明指針p存儲的是數組變數a的地址
char a1[]="asdghh"; //同上
char *s =a1; //同上
*s = *p; // 這句的意思是 把指針p所指向空間的值(這里為數組a)復制到指針s所指向的空間(這里為數組a1)

⑵ 關於c語言字元指針變數指向字元串常量的疑問

錯誤原因:a、b是字元指針,它們指向常量字元串。當你把它們作為參數傳遞給函數_string時,函數所做的操作就是改變b所指向的字元串的值,所以錯誤。你要知道常量字元串時不能改變值的(這涉及到存儲位置的知識,常量字元串存儲在常量區,就像const聲明的常量一樣,改變它的值就是非法的),你只能改變b,讓其指向其他字元串。
修正方法:將b改為長度適宜的字元數組。

⑶ c語言中字元串常量與指針的關系.

首先請明確一點:指針也是變數, 只不過編譯器解析該變數時將它的內容看作地址去訪問內存.
其次請明確應,程序分為不同的段,包括代碼段、數據段等。
類似「hello」這類的變數實際是常量字元串,位於程序的代碼段,char *ptr="hello表示定義字元指針ptr、並將字元串「hello」的首地址賦值給ptr,如此便可通過ptr引用「hello」,當然是只讀引用了。(注意和char ptr[] = "hello"區分,後者定義了一個字元數組ptr)

⑷ C語言 字元指針

你最開始的說法是正確的。

然後第二段程序裡面,STRING1是指向在堆上分配的內存,並且該內存沒有初始化,所以你這個strcat(STRING1,"test1")的行為是很危險的,編譯器在STRING1中尋找到第一個'\0'的位置,然後將"test1"連接在該位置。這個可能會導致溢出,因為STRING1隻有100個字元大小。該操作結果未定義,跟執行時堆的情況有關,而執行時堆的情況是不可預料的。
至於你的疑問,這個地方STRING1指向在堆上分配的內存,堆上的內存是可以給它賦值,而"test1"雖然是常量,但是我們並沒有企圖修改它,只是讀取它,然後將它的值放入STRING1而已。

最後一個問題。C語言中字元串是不能直接用"="賦值的。用strcpy(STRING2,"sdfwe");

⑸ c語言用指針定義字元串常量問題

有思考~真不錯~
你試試printf("%p\n%p\n%p\n",nam1,nam2,nam3);
就是把取地址符去掉,這樣就是列印的常量字元串的地址了。

你列印出來的是新生成的三個指針變數的地址,確實不同;三個指針變數指向的地址確實是相同的(也就是常量字元串的地址),概念混淆了。

⑹ C語言中指向字元串常量的指針問題

定義成字元數組的時候,數組名就是指向數組的首地址的指針,數組在一串連續的地址中,當執行復制向後移動指針的時候會依次讀取字元,沒問題,但是如果是指針,它指向的是在靜態區的一串字元串的首地址,你要把指針向後移動,他的下一個指針指向何處就是個問題了,也就是你訪問了不屬於你的內存地址,所以出錯了!!!

⑺ C語言里為什麼字元指針變數指向的字元串常量中的內容是不可取代的

其本質就是常量值不可修改。
C語言中定義為常量的值,是不允許被修改的,這是一個規則。如果有修改需求,就不要定義為常量,而是定義為變數。
在運行時,常量字元串會被存儲於特定的常量空間,這段空間的特性就是只讀的,任何修改操作,均會引起整個程序崩潰。這也是C語言保證常量不可修改的一個手段。