初學C語言字串指標陣列的問題,關於C語言字串指標陣列的問題

2022-06-10 04:46:37 字數 3515 閱讀 8170

1樓:鷹弈

樓主可以分別執行下這兩個程式

#include

void main(void)

#include

void main(void)

第乙個無法執行,為什麼?因為*s = "abc","abc"是從靜態儲存區域所分配的記憶體,所以導致s[0]無法改變,所以"abc"為常量字串(ps:常量字串的內容是不可以被修改的)

第二個陣列,"abc"可不是常量字串,是從棧上所建立的,是可以改變的裡面任意乙個值的

所以從記憶體分配方式上看,他們是不同的

因此,樓主的話我修改如下:

1.常量字串記憶體由靜態儲存區分配,指標str指向常量字串"aaa"的首位址,內容是aaa\0,不可修改

2.字元陣列str的記憶體是在棧上建立的,容量為4個字元,內容是aaa\0,可修改(沒有什麼拷貝之說,只要宣告陣列,計算機會自動根據你自己規定的容量給你分配記憶體的)

2樓:匿名使用者

您說的「1.」,是對的。

您說的「2.」,不一定。有可能直接將字串就放在給陣列安排的空間裡面而不需要再做拷貝的動作。也有可能是像你說的一樣有乙個初始化的拷貝過程。取決於編譯程式的設計者。

3樓:匿名使用者

我理解是這2個形式都是在記憶體中定義一段空間(變數),被常量初始化。

你可以看一下彙編是怎麼實現的就明白了。

4樓:匿名使用者

前者:指標變數str1和字串常量aaa先存放在記憶體中,然後再把存放字串常量aaa的首位址送給指標變數str1,也就是使指標變數str1指向字串常量aaa的首位址。

後者:先在記憶體中開闢一段以str2為名的空間,然後把字串常量bbb放到以str2為名的空間內。

關於c語言字串指標陣列的問題.....

5樓:it孤鶩

測試通過,望採納,不懂可以追問

#include

#include

#define n 100

int main()

printf("字串數分別為\n");

for(i=0;i

puts(p[i]);

return 0;}

6樓:

比較多錯誤:

1。n是變數(執行時值),不能用於陣列靜態分配(編譯時值). 編譯時不可能預知執行時動態靜,還要學學基礎。

所以使用了乙個動態值作為二元資料第一元,第二元編譯器不懂靜態分配應該分配多少了,即理論不能實現,只能全動態分配記憶體。

2。scanf();裡面記得加回車匹配,否則你輸入按回車後這個回車會當乙個字串。

可以這樣:

#include

int main()

printf("字串數分別為\n");

for(i=0;i

delete a;

return 0;}

7樓:匿名使用者

#include

#include // malloc, calloc函式宣告是這個標頭檔案

int main(void)

for (i = 0; i < n; i++)puts(p[i]); // 迴圈輸出字串

return 0;}

8樓:匿名使用者

scanf("%d",n);

定義陣列不能用變數,就是不能用n。

可以使用動態變數。用new,最後再delete掉。

換成new char*a=char[n][100];

最後delete a;

或者像一樓那樣將n作為define的全域性變數

c語言字元陣列的指標問題

9樓:

這個就是看你對指標的理解了

char *name[ ]=;相當於你定義了乙個char*的指標陣列,每個陣列元素指向乙個字串。

char name[ ]=;表示你定義了乙個字元陣列,而你初始化的時候,確實字串,肯定編譯不過的。

是不是二維陣列,就看你怎麼理解了,char *name[ ],中的name相當於char **!

10樓:緩緩掉落的松針

char *name 你看這個和定義指標有什麼區別,是不是多了乙個,然後看和定義陣列有什麼區別,是不是多了乙個*。

那麼單獨來看一下,定義陣列char name[4],這樣定義了乙個字元陣列,而此時的name是什麼?是不是這個陣列的首位址的指標,也就是說定義了乙個字元指標,這個指標指向陣列的首個位置。

那麼再單獨看一下,定義乙個指標,char *name,這個指標和上面定義的陣列有什麼區別?是不是在於這個指標的空的,沒有指向任何地方,而如果我在加一句name=(char*)malloc(4*sizeof(char));這樣name就指向了乙個4個字元大小的位址的首個位置,和上面定義的陣列完全沒有區別了。

好了,char *name 這裡既有*又有,就是說定義的是指標,但是是指標陣列,也就是很多個指標,而這其中的每乙個指標都指向乙個字串的首個位置,也就是字串陣列,字串陣列也就是字元的二位陣列。。。。

說了這麼多,應該理解了吧。。。。

c語言字元陣列與字串問題

11樓:渿河

這是在定義時初始化 如果你的右邊花括號內的字元個數少於【陣列元素個數】 那麼其餘的陣列元素將會初始化為0 , 』\0'的ascii碼的值就是0 ;

如果你不指定陣列元素個數 編譯器會自動幫你計算出元素個數的

12樓:

char c[10]=;這個是已經給定了陣列的大小,達不到陣列大小的長度的話會自動添零的

關於c語言指標指向字元陣列的問題?

13樓:

程式寫錯了,指標所指的位置不對,改成這樣:

void main()

for(int i=0;i

system("pause");

return;}

14樓:匿名使用者

這個問題說起來簡單,也複雜;首先需要理解陣列宣告後的記憶體分配,str0[3][20],分配連續60個位元組的空間,str0[0]指向起點,str0[1]指向第21個字元,也就是str0+20;以此類推;

你輸入的時候是從開始連續放到這個儲存空間,也就是str0+0、str0+1、str0+2;

輸出時從str0+0開始,字串是以0結束的(表述為'\0'),後面知道此之後才是'\0',所以首先輸出abc;然後從str0+1開始輸出,結果為bc;然後輸出就是c了。

現在的p++是指向下乙個字元(移動乙個位元組),而不是乙個字串。

按照你想要的應該輸入的時候,儲存位址應為str0[0]、str0[1]、str0[2];輸出也同樣

C語言中如果將指標所指向的字串賦給陣列

陣列宣告的時候就 抄要指襲定大小的 可以用memcpy,對於字串,也可以用strcpy或strncpy 需要包含string.h 比如 char p abc char a 10 memcpy a,p,sizeof a 或者strcpy a,p 或者strncpy a,p,sizeof a 比上面的s...

c語言字串程式設計問題

include int main for i 0 i a data i z data i a data i z continue for j i 1 j a data j z data j a data j z if itemp i else break for i itemp i 0 data i...

c語言中字元陣列和字元指標的問題

在函式內 char陣列被定義成局 部變數,函式執行後會被系統給釋放掉。但char p 則是定義成乙個常量,程式執行完後才會釋放掉。所以在返回char p 時會返回亂碼,但 char p 則可以全部顯示出來 當然 char 也可以定義成靜態變數 這樣就可以顯示出來了不如static char p he...