char pJohn」p 2a 為什麼這樣不對呢?C

時間 2021-10-14 22:12:25

1樓:匿名使用者

因為"join"是常量字串,是存放在常量區的,不能被**修改如果想修改的話,請在棧或堆分配空間

例char *a = "john";

a[2] = 'a'; // 不合法

char b = "john";

b[2] = 'a'; // 合法

char* c = new char[5];

strcpy(c, "john");

c[2] = 'a'; // 合法

2樓:匿名使用者

你構造了一個陣列 並且返回了j的首地址「指標」給char *p沒錯,但是因為char *p編譯器認為是一個字元指標而不是字元陣列指標所以p[2]無法用,要告訴系統 我這是個陣列指標 char *p[n] n為正整數且大於後面的字串數量才行。

3樓:匿名使用者

因為你定義的 char *p 是常量,不能改變其表示的結果。

也就是 p字串的結果不能改變的。

所以如果你需要改變必須定義為 char ss[100]=「john」 這樣就可以改變

如果非的用指標。這時候 char *p=ss。這樣就可以用p[2]了希望你懂了

c語言,char a[10],*p; p=a=」china」; 為什麼是錯的?請詳解

4樓:成楊氏伍秋

應該選d。來p是指標變數名,可以把源地址賦給指bai針變數,只能逐個du引用陣列元素zhi的值而不能整

dao體引用,更不能對整個陣列進行自增或自減,沒有c這種初始化形式,d是用自符串常量來初始自符陣列,前三個元素為mba,第四個為反斜槓0,後六個為空自符。

5樓:雲哉

字元陣列直接賦值成字串只能在初始化進行就是說你只能用char a[10]="china"這樣才可以,然後p=a是可以的

6樓:

a表示陣列復的首地址

p是一個制指標變數,可以將陣列的首地址賦值給p, 所以p=a;是正確的

但是a= "china"卻不行,因為字元陣列a是作為字串常量存在的,只能在定義的時候賦值,

不能像這樣在後面對陣列進行賦值操作

7樓:匿名使用者

p和s都是地址,所以不能賦值china,只能同樣賦值一個地址

8樓:逍遙足球子

字元陣列a 已經被定義並且為常量。所以a不可以被進行賦值工作。

9樓:匿名使用者

p是指標,不能直接賦值

可以如下賦值:

char a[10],*p;

a="china";

p=a;

char *p=a 是什麼意思?該怎麼解釋?

10樓:匿名使用者

我還是先給你簡單解釋一下指標吧:其實電腦的記憶體管理有點像賓館,分成很多個房間,裡面再存放資料。而房間號就是地址,房間名就是變數名。

指標是一個32位的整型變數,裡面存放的是變數的地址,相當於房間號。當你用char *p;定義了一個指標變數之後,那麼在以後的引用中,p是地址,*p是這個指標指向的內容,另外在指標的使用過程中,還經常用到&操作符,它的作用是取地址。比如你用char a,*p;語句同時定義了一個字元變數和一個字元型指標變數,那麼如果你p=&a;意思是把a這個變數的地址賦值給p,也就是讓p指向a。

再比如你說的char *p=a;這句,它等同於以下2句:

char *p; //宣告一個指標變數p=a; //把a裡面的地址賦值給指標p,這樣的結果是讓p和a指向同一個記憶體空間,也就是同一個變數。

11樓:勇者之心的心

我覺得是定義了一個字元型指標p,它的值是a,地址是&a,這是定義一般型指標的通用方法

12樓:樂酷科技

char *a;就是宣告a是指標啊

char *p=a;就是宣告指標p 把a賦值給他

13樓:匿名使用者

char*a, char *p這兩個都是字元指標宣告,char *p=a語句是宣告p變數為字元指標,並且將a的地址賦值給p,結果就是p和a指向同一個地址,操作的內容就相同了。這裡,兩個的區別就是,char*a是輸入引數,可以看作全域性變數,而p是內部變數;函式結束返回後,p變數就沒有了,a變數的生命週期是否結束,需要看傳入引數的生命週期。

這個例子中,對p的操作和對a的操作完全一樣(,簡化寫法可以不用char *p=a這句了,直接對a操作,但是這裡這樣的函式寫法是非常規範的寫法,贊一個:))這裡的原則是:函式內部不直接對輸入指標、引用直接操作,而用區域性變數操作,避免函式執行期間,外部指標、引用變數改變了導致不可**結果);因為看不到完整的函式,現在不能評估p是否還有其他的用途。

c++裡面, char a[100] =''hello'';和char *p = ''hello'';的區別是什麼。

14樓:

位置不同

char a[100] 在棧上分配了陣列的空間,可讀,可寫char *p = "hello", 字串的空間在常量區分配,回只讀

嚴謹的寫法應該是:

答const char *p = "hello";

c/c++為了相容歷史**,才允許寫成char *p = "hello";

但一旦試圖寫入這個空間,作業系統(dos不算啊)會捕捉這個錯誤的

15樓:匿名使用者

區別之一:

a[100] =''hello''; 分配baidu100個字zhi節記憶體,而char *p = ''hello'' 只分配6個位元組記憶體

區別之二:

前者所存的dao內容可以改變(例如版

權a[3]='a'; ok),而後者則不可以(例如p[3]='a'; error)。

16樓:匿名使用者

二者在記憶體中的來

位置肯定是源不同的,前者是字元型陣列,是將字串放到了這個陣列中,分配在記憶體的棧區域,而後者則是將字元型指標指向此字串,是將字串的首地址賦給了指標p,但是字串是在記憶體的程式區,這是二者的區別,從訪問機制上來說,陣列用下標運算子「[ ]」進行值訪問,例如a[0]值為h,a[1]值為e;指標則是需要用反向引用運算子進行值訪問「*」例如:*p值為h *(p+1)值為e。

17樓:法律研究者

char a[100]表示

字串一維bai資料組。他表du示把字串「hello」儲存

zhi到daochar a[100]裡面。後面的char *p表示內先找到儲存字串「hello」的地址,然容後從裡面把字串取出來。正如1l所說,訪問方式不同

18樓:匿名使用者

訪問方式不同:a[i],*(p+i)

c++ new問題 char *p = new char[4]; p[40] = 'h'; 這樣子為什麼可以?

19樓:爺已戒菸很多年

因為p只是一個指標,它只表示一個地址,p[40]肯定是一個越界的地址,但是這個地址確實是真實有效的地址,表示從p當前指向的位置開始,向後偏移40個位元組以後的位置,這個位置如果沒有被其他的程式或者受保護的檔案使用的時候,那你修改就是沒有問題的,你也可以給裡邊寫入資料,但是一旦那個地址受保護,那你的程式會立馬崩潰掉——所以,使用之真要嚴格控制越界問題,很多時候你不執行很多次根本就不會發現錯誤

20樓:

這樣是不可以的,你的陣列越界了。雖然你沒看出來有什麼問題。這樣的程式沒有編譯錯誤,但是有執行錯誤,很可能程式在執行的時候出現突然崩潰等奇怪的現象。

所以,以後一定要避免這樣寫程式,這樣的程式維護成本很高。 手打~

1 1為什麼。,1 1 為什麼。 2 ?

革和 這看你說的 1 是概括什麼的了 而且看你用什麼來思考,正常思考的話,1代表的是個體,比如一個蘋果加一個蘋果等於倆蘋果,但如果深了思考,這個 1 代表的東西可以不是個體,什麼都有可能,那麼我個人認為1 1 2,甚至可以 2 我個人是這麼理解的,別代入太多,因為我也不確定對不對 顧海闖天涯 加號表...

by2是什麼意思, BY2 為什麼叫「BY2 ?「BY2」有什麼含義?

組合的名字 by2是來自新加坡的18歲 白 氏雙胞胎女孩,從2,500人的新秀甄選會中脫穎而出加入海蝶唱片,08年發行首張 16未成年 by2 姐姐白緯芬 妹妹白緯玲。一對青春 活力 可愛 能歌善舞的孿生姐妹締造華語樂壇新勢力 by2天賦異稟的 才能,年僅花季的年齡唱出不凡的 感 她們代表的是一群蓄...

為什麼2月沒有30日呢,為什麼2月沒有30號?

夏泠郗 我們今天用的公曆是從儒略曆變來的.在公元前46年,羅馬的統帥叫儒略 愷撒.據說他的生日在7月,為了表示他的偉大,於是他決定 將7月叫 儒略月 連同所有單月都定為31天,雙月定為30天,只有2月平年29天,閏年30天.因為2月是行刑的月份,所以減少一天.愷撒的繼承人叫奧古斯都,他的生日在8月....