我有一個int指針數組int* arr[MAX];
,我想將其地址存儲在另一個變量中。我如何定義一個指向指針數組的指針?即:指針數組指針
int* arr[MAX];
int (what here?) val = &arr;
我有一個int指針數組int* arr[MAX];
,我想將其地址存儲在另一個變量中。我如何定義一個指向指針數組的指針?即:指針數組指針
int* arr[MAX];
int (what here?) val = &arr;
應該僅僅是:
int* array[SIZE];
int** val = array;
沒有必要對賦值運算符的右側上array
使用地址的運營商因爲數組衰變爲隱含指針。
IIRC,數組是隱式轉換爲指針,所以這將是:
int ** val = arr;
據我所知,目前還沒有具體類型c
「整數數組」,因此它的不可能有一個特定的指針。你唯一能做的就是使用一個指向int的指針:int*
,但是你應該考慮int的大小和你的數組長度。
正確的答案是:
int* arr[MAX];
int* (*pArr)[MAX] = &arr;
或者只是:
int* arr [MAX];
typedef int* arr_t[MAX];
arr_t* pArr = &arr;
最後一部分內容爲「帕爾是一個指針,指針類型爲int的MAX元素的數組」。
在C中,數組的大小存儲在類型中,而不是數值中。如果你想讓這個指針正確地處理數組上的指針運算(如果你想使二維數組超出這個數組並且使用這個指針遍歷它),你通常不幸的需要有嵌入指針類型中的數組大小。
幸運的是,既然C99和VLA(甚至可能早於C99?)MAX可以在運行時指定,而不是編譯時間。
根據這個源http://unixwiz.net/techtips/reading-cdecl.html,通過使用「向右走就可以了,向左走的時候,當你必須」的規則,我們得到了以前的答案給出的聲明如下2個含義 -
int **val ==> val is a pointer to pointer to int
int* (*pArr)[MAX] ==> pArr is a pointer to an array of MAX length pointers to int.
我希望上面的意思是有道理的,如果他們不這樣做,那麼仔細閱讀上面提到的來源可能是個好主意。
現在應該清楚,第二個聲明是moteutsch正在尋找的聲明,因爲它聲明瞭指向數組的指針。
那麼,爲什麼第一個也工作?請記住,
int* arr[MAX]
是整數指針的陣列。所以,val是一個指針,指向在int指針數組中聲明的第一個int指針。
我相信答案是簡單的:
int **val;<br>
val = arr;
但我想要一個指向數組的指針,而不是數組本身。 – moteutsch 2011-05-25 20:57:28
@moteustch那麼,你有一個指向數組的數據的指針,這個數據幾乎是一樣的。 – 2011-05-25 20:58:45
是的,'val'是一個指向'int'指針數組的指針(從語義上講)...如果你取消了val的引用,你將最終得到指針數組,也就是說, * val)[INDEX]'。因此,由於'val'將地址保存到'int *'數組的開始處,因此它是指向數組的指針。 – Jason 2011-05-25 21:01:39