我有以下程序。但是,我不明白爲什麼我必須傳遞數組的地址。當他們都指向同一個地址時。這是int數組的第一個元素的地址。爲什麼我不能直接在C中將指針分配給指針?
我得到一個警告,當我嘗試做這個 「不兼容的指針類型賦值」:
ptr = var;
完整的源代碼:
void print_values(int (*ptr)[5])
{
size_t i = 0;
for(i = 0; i < 5; i++) {
printf("%d: [ %d ]\n", i, (*ptr)[i]);
}
}
int main(void)
{
/* declare a pointer to an array integers */
int (*ptr)[5] = NULL;
/* array of integers */
int var[] = {1, 2, 3, 4, 5};
/* assign the address of where the array is pointing to (first element) */
ptr = &var;
/* Both are pointing to the exact same address */
printf("var [ %p ]\n",(void*)var);
printf("&var [ %p ]\n", (void*)&var);
print_values(ptr);
return 0;
}
我編譯gcc 4.4.4 c89 -Wall -Wextra -O0
我試圖重寫你的標題,因爲它沒有意義。請確認我是否正確選擇了問題的要點。 – 2010-08-17 16:40:09
我覺得你的標題聽起來比我的好。謝謝。 – ant2009 2010-08-18 02:06:52
你的代碼片段編譯得很好。你的意思是如果你將'ptr = var'添加到main中,你會得到一個錯誤? – 2015-07-21 14:56:58