2012-11-10 166 views
1

我不太明白的地方的錯誤是在這裏:指針數組和指針的指針數組

int *parr[22]; // Array of int* pointers 
parr[0] = ptr1; 
parr[1] = ptr2; 
//... 

int *(*pparr)[22]; // A pointer to a int* array[22] 
pparr = parr; // ERROR 

錯誤告訴我error C2440: '=' : cannot convert from 'int *[22]' to 'int *(*)[22]'

怎麼來的類型不相同?數組的名稱應該等於一個參考陣列的第一個元素,像

parr => &parr[0] 

太行似乎是正確的我

+1

你想http://stackoverflow.com/a/6130884/315052 – jxh

+0

必須是'PPARR = &parr;'的類型兼容。 –

回答

1

由於pparrA pointer to a int* array[22],所以你需要寫

pparr = &parr; 

您需要存儲地址的指針,而不是指針本身。

這是相同的,當你有

int a=3; 
int *b; 
b=&a; 

您存儲的在B地址一樣,同樣需要存儲的parr地址pparr

編輯:爲了澄清OP的評論

您不能指定第一個元素的地址,但是指向第一個元素的指針的地址(因此爲pparr = &parr;

+0

是的,但數組的名稱應該等於對數組第一個元素的引用,所以我應該已經有地址 –

+0

你這就是爲什麼我們不寫'pparr =&parr [0]'我們正在編寫'pparr =&parr' – Ankur

1

int*[22]可以衰減到一個int**,但你不能將int**分配給int*(*)[22]

0
int *(*pparr)[22]; //This one is an array of function-pointers returning an int pointer. 

int **pptr; //Points to an array of pointer 

所以,你可以寫

pptr = parr;