2014-03-28 88 views
0

這可能是一個非常簡單的問題,但我似乎無法在網上找到明確的答案。假設有一個指向數組的指針,聲明爲:操縱指針指向的內容

static char newMessage [400]; char * p =&newMessage; (我不知道這是否是正確的)我將如何去處理newMessage數組只使用指針。我這樣做是因爲C無法返回數組,但可以返回指向數組的指針。請溫柔,我是新

回答

4

你的代碼是差不多正確;唯一的問題是你有不匹配的指針類型。你想:

char *p = newMessage; 

不:

char *p = &newMessage; 

後者試圖初始化p,一個char *變量,用char (*)[400]類型的值,它是無效的C.

你之後已創建並初始化p,您可以使用它,但是您可以使用它:

p[6] = 12; 

或類似的東西。

+0

這使得我的代碼最終沒有任何警告地編譯,現在我只需要處理我遇到的seg錯誤錯誤:D –

+0

@ OP-使用這種方法,使用返回指針的代碼只需手動記住它指向400個字節的分配空間。這有點脆弱,會導致錯誤發生,所以要小心。 –

2

指針就指向數組

char* p = newMessage ; 

而且從函數返回。

您可以像使用指向的數組一樣使用它。

newMessage[2] = '\0' 
p[2] = '\0' 
1

其實,這應該是char *p = newMessage; .The char[]行爲類似於char*。 您稍後將通過修改任何指針來修改它。順便說一句,這是非常基本的,所以最好你閱讀教程。 另外,既然你問了這個,如果你打算返回一個指向數組的指針,那麼數組最好不要分配在堆棧上。它應該是堆分配(這是你的情況,因爲靜態)

2

在聲明像static char newMessage[400]陣列,所述標識符newMessage第一元件陣列的的地址取代,並且它的行爲就像一個指針。

char* p= newMessage; 
char* q= "Hi, world"; 
newMessage[4]= 'x'; 
p[4]= 'x'; 
*(newMessage + 2)= 0; 
*(p+2)= 0; 
strlen(newMessage); 
strlen(q); 
strcmp(newMessage, "Hi world"); 
strcmp(p, q); 

都是有效的表達式。

請注意,在最後的四個函數調用中,您不是傳遞數組,而是指向字符串的第一個字符的指針。按照慣例,函數掃描內存直到找到空字節終止符。

1

你實際上不能操作數組,因爲數組在c中不是第一類類型。

幾乎所有你關心的數組名都會使其退化爲一個指針。例外是sizeof,因此您可以使用sizeof array/sizeof *array來獲取元素數。

你能做什麼,就是改變數組元素的值。使用指針算術和取消引用*。指數運算符a[b]*(a+b)的語法糖。

此外,您可以使用庫函數(或您自己的),它接受指針。