C語言字元陣列的指標問題,C語言字串指標問題

時間 2022-08-31 10:26:52

1樓:

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

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

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

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

2樓:緩緩掉落的松針

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

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

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

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

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

c語言字串指標問題

3樓:過雲回青易

在編譯期間,編譯器得到的結果是,指標a和b指向的是靜態區間,這段區域是不能隨意改變的,而在後續的

while(*p2++=*p1++);中,卻給p2也就是b賦值了,這樣會出錯的,如果一定要做這樣的功能,建議在開始宣告兩個字串的時候,用chara

4樓:匿名使用者

這裡"hello"是乙個sz字串,你可以把它看坐是乙個字元陣列陣列裡有7個元素'h','e','l','l','o','/','0',p就是指向這個陣列首位址的指標,所以p裡面存的是這個陣列的首位址,使用的時候p依次加1,就可以取得裡面所有字元。或者用printf(「%s」,p);直接輸出乙個sz字串

5樓:

hello雖然是常量字串,但是它需要儲存記憶體的棧上,指標p指向該常量字串的記憶體首位址

6樓:匿名使用者

你這樣等於把hello當位址付給了p 所以p就是指向字串的第乙個位址'h', c語言裡面可以把字串當位址給指標 而且字串位址就是本身它自己 這也就是 *p輸出的是'h' 了

但p=『h』就另當別論了 *p就可能是其他了 沒定義字元位址就是它自己 在c++中可能根本不允許 char *p='h';

7樓:匿名使用者

首先,指標不是位址。p是指標變數,這個變數是記憶體中的一塊空間,可以用來儲存資料,但是要求這個資料——必須是字串「型別」的位址,才可以存放。「hello」,在c語言中不是字元,而是字串,儲存字串「型別」可用char×。

8樓:匿名使用者

讓p指向常量字串hello的首位址,即p中存hello的第乙個字元在記憶體中的位址,p="hello";

就等於把字串首位址賦給了指標變數p

希望能夠幫到您

補充您的提問如下:

這雖是乙個賦值表示式,但不是把內容hello賦給指標p,p的內容仍是位址,是字串hello的首位址,實際上此表示式就是把字串首位址賦給p,讓p指向常量字串hello的記憶體單元,就是這個意思,有點繞,希望您明白了。

9樓:匿名使用者

指標當然也需要位址來儲存,但是指標儲存的內容是記憶體位址而已

10樓:匿名使用者

p指向字串的首位址,即'h'

11樓:

兩種都是說明字串變數的的辦法

char *p 表示p是乙個指向某個字串首位址的指標,但此時該字串還不存在,也沒分配空間

p=「hello」 可以理解為p是乙個字串變數,但該字串已經分配空間

還可以這樣定義:

p[5+1]=;

兩者的一些區別:

對於char *p 來說

*p = 「hello」; 合法

strcpy(p,"hello"); 非法gets(p); 非法

對於p[5+1]=;或(p="hello";) 來說p=「hello」 非法

strcpy(p,"hello"); 合法gets(p); 合法

12樓:貧寒烏鴉

這裡是定義了乙個字元指標p,再將字串常量"hello"的第乙個元素的位址(即存放字串的字元陣列的首元素位址)賦值給它。如果誤認為是將這個字串賦值給他是不對的,以上的語句等同於:

char*p="hello";

這裡是初始化。

可以看到p被定義為乙個指標變數,指向字元型資料,輸出時,要用:

printf("%s\n",p);

在輸出時,系統先輸出它指向的乙個字元資料,然後自動使p加1,使之指向下乙個字元,然後在輸出乙個字元···如此直到遇到字串結束標誌'\0'為止。

說明:通過字元陣列名或字串指標變數可以輸出乙個字串,而對乙個數值型陣列,是不能企圖用陣列名輸出他的全部元素的。

具體的可以參考譚浩強編寫的《c語言程式設計》一書,上面有詳細的介紹。

13樓:匿名使用者

"hello"是字串

14樓:滄海笑蝸牛

看書去吧 這是c語言基礎!

15樓:甕友英麗

你好!p記錄的其實是"iama

good

boy"字串的首位址,呼叫printf函式時,傳遞的是p(字串的首位址),printf函式的實現部分按字串首位址依次搜尋出字串的字元,直到遇到『\0』停止!

純手打,請給分,謝謝!

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

16樓:匿名使用者

1.fun函式定義中char *s[100] 和 char(*s)[100]區別在**?

char *s[100]; 這個叫指標陣列,說白了就是本質上講是陣列,只不過陣列的每個元素都是指標

char(*s)[100];這個叫陣列指標,說白了本質上是乙個指標,只不過指標指向的是乙個陣列

2.主函式中,只是定義了 str[10][100] ,為什麼就可以直接 gets(str[i])? str是什麼?

這裡str是乙個二維陣列,所以str[i],只有第一維的話,就相當於上面的陣列指標,本質上是指標

17樓:匿名使用者

char *s[100]表示陣列s[100]是指標型別的,每個陣列元素都相當於乙個指標變數,都可以指向乙個字元型變數;

char(*s)[100]表示s是乙個指標變數,它指向包含100個字元型元素的一維陣列;

str表示乙個字元陣列;這題中,str[i]=str[0],而gets函式表示得輸入字串,輸入沒有限制,直到輸入換行符或者其他的結束標識,輸入才結束;輸入的字串就存放在str[10][100]這個陣列中,str[0]表示將輸入的第乙個字元存在陣列的首位元素中,其他的字元按陣列順序存放。

c語言 字元指標和字元陣列的區別

18樓:御阪妹妹

首先第一點,非常重要的一點:指標和陣列是不同的兩個型別!

我們從可以從c語言標準文件中得知:

iso/iec 9899:1999 - programing language c

6.2.5 types

20 .

這說明了什麼是陣列型別

同樣在20 .

說明了什麼是指標型別。

在了解了兩種型別的基礎上,我們了解陣列和指標的區別:

陣列是一組相同型別物件的集合,指標是對乙個物件的引用。

它們在使用中表現出了一定的相同點,但不同點也是很多的:

1,陣列直接儲存物件,指標則是指向乙個物件。

2,陣列名不能被賦值,指標變數能。

3,sizeof乙個陣列,得到陣列的長度(位元組單位),sizeof乙個指標,相當於sizeof(void*)。(注意,不同目標平台指標長度可能不同,所以sizeof(void*)是最準確的回答)

4,(可能是考試內容,對於正確性就呵呵)指標是間接訪問,陣列是直接訪問。

如果你對c語言有深入學習的想法,務必去了解一下c語言的iso標準。

19樓:匿名使用者

字串指標變數本身是乙個變數,用於存放字串的首位址。而字串本身是存放在

以該首位址為首的一塊連續的記憶體空間中並以『\0』

作為串的結束。字元陣列是由於若干個數

組元素組成的,它可用來存放整個字串

char *p =「c language」;

char p=;

可以理解為:字元指標是字元陣列的退化

但是實際使用中,字串指標卻比字元陣列更好用

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

20樓:

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

void main()

for(int i=0;i

system("pause");

return;}

21樓:匿名使用者

這個問題說起來簡單,也複雜;首先需要理解陣列宣告後的記憶體分配,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語言指向 字串陣列 的指標 的宣告方式

22樓:匿名使用者

#include

int main(void)

;char * p[3] = };

puts(p[0][0]);

return 0;

}//注意char * (*p) = 。。。 並不是宣告陣列,宣告陣列的方式是char * p[3] = ,{},{}...};

//char * (*p)只是宣告變數,常用作函式的宣告中作為形參來使用。

c語言字元指標怎麼輸入?謝謝

23樓:四捨**入

#include

#include // 要用尖括號

int main()

char *str;

str = (char*)malloc(sizeof(char) * 20);  // 申請20個char長度的空間

scanf("%s", str);  //輸入printf("%s\n", str);  // 輸出free(str);  // 釋放空間

return 0;

C語言中指標陣列的問題,c語言關於指標陣列的問題?

這樣看 0x00 0x78,0x99 0x78 h e l l 0 0 0x99 w o r l d 0 其中s就是0x00,然後,s 0 就是 0x00 0 0x00 取內容,得到的值是0x78,然後列印的就是hello s,就是相當於s 0 s 1,因為優先順序關係,先執行s 0 就是 0x78...

C語言字串陣列的問題,C語言字串陣列的問題

scanf 輸入時不能讀取空格鍵的,所以a儲存的是123,b儲存的是456,當然由於你是用 s輸入的,會自動在123後面加上 0 0是乙個字串的結尾 printf s n s n a i b i 這句只會輸出null int a max b max 這兩個整形陣列儲存的全是0,int的 0轉化為字元...

關於c語言陣列和指標的問題,關於C語言陣列和指標的乙個問題

c 語言裡 1 形式邏輯不成立。2 要分清 乙個形式 出現在 宣告裡,還是 出現在語句裡,3 另外,字元變數 與 普通變數 有些 不同。下面只談字元 宣告 char s 10 hello s 是 陣列,初始化 hello 0 自動加 0 宣告 char p p 是 指標。宣告 char p s p ...

c語言字元陣列越界輸出,C語言字元陣列越界輸出

不是這樣的,雖然你只申請了10個,但strlen 測試是以 0 為陣列結束的標誌的,所以,當他檢測a的區域時,一直到a 9 都沒有發現 0 這個目標,所以,他會繼續查詢,直到找到他的 愛人 0 方止.sizeof 同理.所以當你輸入12個 w 時,strlen a 會等於12,sizeof a 同樣...

C語言的指標陣列的問題

char p1,p2,p3 這是定義了三個指標變數,沒有被初始化。char p 3 是定義了乙個包含三個指標 p 0 p 1 p 2 的陣列,同時你努力地用三個未初始化的變數把它初始化了。警告!但只是警告,所以你可以頭破血流地去使用它。此時,你擁有包含陣列中的不務正業的三個野指標,總共六個指標了。p...