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; 這樣看 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... 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 語言裡 1 形式邏輯不成立。2 要分清 乙個形式 出現在 宣告裡,還是 出現在語句裡,3 另外,字元變數 與 普通變數 有些 不同。下面只談字元 宣告 char s 10 hello s 是 陣列,初始化 hello 0 自動加 0 宣告 char p p 是 指標。宣告 char p s p ... 不是這樣的,雖然你只申請了10個,但strlen 測試是以 0 為陣列結束的標誌的,所以,當他檢測a的區域時,一直到a 9 都沒有發現 0 這個目標,所以,他會繼續查詢,直到找到他的 愛人 0 方止.sizeof 同理.所以當你輸入12個 w 時,strlen a 會等於12,sizeof a 同樣... char p1,p2,p3 這是定義了三個指標變數,沒有被初始化。char p 3 是定義了乙個包含三個指標 p 0 p 1 p 2 的陣列,同時你努力地用三個未初始化的變數把它初始化了。警告!但只是警告,所以你可以頭破血流地去使用它。此時,你擁有包含陣列中的不務正業的三個野指標,總共六個指標了。p...C語言中指標陣列的問題,c語言關於指標陣列的問題?
C語言字串陣列的問題,C語言字串陣列的問題
關於c語言陣列和指標的問題,關於C語言陣列和指標的乙個問題
c語言字元陣列越界輸出,C語言字元陣列越界輸出
C語言的指標陣列的問題