2014-07-14 37 views
0

我用的cdecl,並得到其定義爲「聲明PAPI爲指針數組10的指針爲int」 所以,我寫我的代碼以這種方式什麼是INT的意義*(* PAPI [10])

int i = 10; 
int *api[10]; 
api[0] = &i; 
int *(*papi[10]); 
papi = &api; 

而且我得到了一個錯誤說「數組類型‘詮釋 [10])’不可轉讓」

什麼是使用PAPI正確的方法是什麼?

+0

最後關於完全清楚,謝謝你所有的HEL p! – Floyd

回答

1

我interpretated短語 「聲明PAPI作爲指針的陣列10的指針爲int」 爲申報的10個指針的數組的指針爲int。:)

嘗試使用以下

#include < stdio.h> 


int main(void) 
{ 
    int i = 10; 
    int *api[10] = { &i }; 
    int **papi[10]; 
    papi[0] = api; 

    printf("%d\n", ***papi); 
} 

輸出是

10 
+0

它不應該是** papi而不是*** papi? – Floyd

+0

@Floyd:'papi'是指向int指針的數組,'* papi'是指向'int'的指針,'** papi'是指向'int'的指針,'*** papi '是一個'int'。 – mafso

+0

終於明白了,*** papi等於** papi [0],謝謝你的演示! – Floyd

3

數組名稱是不可修改的l值。您不能將它們用作=運算符的左操作數。 papi是一個數組名稱。更改

int *(*papi[10]); 

int *(*papi)[10]; // papi is pointer to an array of 10 pointers to int 
+2

是true,但不會導致錯誤 –

+0

對不起,這是一個錯字,我修復了這個錯誤。 – Floyd

+0

謝謝,我明白int *(* papi)[10],但我認爲我將數值分配給數組papi的第一個位置,不是嗎? – Floyd

2

您不能分配到下一個數組,你似乎有什麼想要做的是:

int i = 10; 
int *api[10]; 
api[0] = &i; 
int *(*papi)[10]; 
papi = &api; 

它聲明papi作爲一個指針數組10指針int。這是&api的類型,需要指向int的10個元素的指針數組的地址。

HTH

+0

嗯,我沒有發現你的代碼不同.... – Floyd

+0

區別在於這段代碼編譯沒有錯誤。 +1 – delicateLatticeworkFever

+0

噢,我瞭解這個int *(* papi)[10] ....,但仍不清楚int ** papi [10]在做什麼以及如何使用 – Floyd

相關問題