「以下哪項:
int a[4][4], (*b)[4], *c[4], **d;
你能不能傳遞到期待一個指針的指針爲int 功能即
int funct(int **);
解釋你的答案。「
答案是c和d我相信嗎?
我只是在努力去理解爲什麼其餘的都不允許?
任何幫助,將不勝感激。
「以下哪項:
int a[4][4], (*b)[4], *c[4], **d;
你能不能傳遞到期待一個指針的指針爲int 功能即
int funct(int **);
解釋你的答案。「
答案是c和d我相信嗎?
我只是在努力去理解爲什麼其餘的都不允許?
任何幫助,將不勝感激。
funct
需要一個int **
- 也就是一個指針指向一個int。 d
是字面意思,所以沒問題。 c
也可以工作,因爲它是一個指向int的指針數組,當在函數調用上下文中使用時,它會衰減爲指向指向int的指針。
a
和b
將不起作用,因爲它們不是兼容的類型。 a
是一個int數組,而b
是一個指向int數組的指針。當作爲參數傳遞時,a
將衰減爲指向int數組的指針。
我是否正確,如果我說B不會衰變? – user2469515
是的,這是正確的。這是一個指針 - 只有數組類型拉動了這個技巧。 –
@ user2469515衰退並不是真正的相關問題。 b指向的是4個整數的數組,而想要的是指向'int *'的東西。 b + 1是大於b的4 * sizeof(int)'字節,而不同的是'sizeof(int *)'字節。 –
如果我可以添加一些信息上面的答案之間的差異。
這個 - []
在聲明數組時具有比此*
更高的優先級。這與數組和指針始終可以互換(它們不是)的假設相結合,可以吸引很多人。
天真的人會認爲int *arr[]
是一個指向數組的指針,因爲從左到右讀這是一個自然的假設。
但它實際上是一個整數指針數組。你想要一個指向數組的指針?告訴C如下:
int (*arr)[array_size];
通過設置您自己的優先順序。
卡爾只解釋回答c
和d
都適用,因爲在d
情況下作爲參數傳遞你已經有一個指針的指針,並在c
情況下指針數組會衰減到一個指針的指針到一個功能。
如果你想將讀取a
和b
功能,簽名需要更改爲以下:
int funct(int (*array_name)[array_size]);
注意,在這裏上面,你需要指定數組的大小指針將指向。
一般如果傳遞數組它作爲指向數組的第一元件傳遞的函數...
INT A [4] [4]至功能即樂趣(一個);它以int(* p)[4]的形式傳遞,所以fun參數必須很有趣(int(* p)[])
這裏first元素本身是一個4整數的數組
fun(a)---> fun(int(* p)[])
int(* b)[4]是一個指向4個整數數組的指針,所以調用fun(b)require參數必須是fun(int(* pt)[ ])
樂趣(b)--->樂趣(INT(* PT)[])
INT * C [4]是4個整數指針的數組..所以調用的樂趣(c)中要求參數必須是 是po inter到數組的第一個元素。這裏第一元件是本身的int pointer..so樂趣(INT ** P)
樂趣(c)中--->樂趣(INT ** P)
INT ** d是雙指針到一個int..so調用樂趣(d)要求參數必須是 樂趣(INT ** p)
樂趣(d)--->樂趣(INT ** p)
你應該閱讀[C FAQ,第6章,數組和指針](http://c-faq.com/aryptr/index.html)。 –
謝謝,我現在要讀它 – user2469515