2015-10-05 27 views
-1

我對C非常陌生,目前在指針方面遇到了一些麻煩,我不確定在這個問題上我的邏輯是否正確,澄清會很好。使用在c中有**的指針

第二個表達式是否合法?爲什麼或者爲什麼不?這是什麼意思?

int** x = ....; 
... **x ... 

這是所有的問題可以讓我想出了以下的答案(我認爲它在球場)

的int ** x將初始化一個指針x到任何地址/值,等號後。 ** x ...將指針取消引用一個值/變量

在編輯中提出的問題鏈接只是顯示了int * p和int * p之間的區別,這已經。

+0

([INT \ * p和INT \ * p聲明之間的區別]的可能的複製http://stackoverflow.com/questions/5590150 /差-INT-p間 - 和 - int-p-declaration)(是的,我注意到了雙星指針。無論如何,這是一樣的! – Olaf

+0

使用cdecl獲取詳細信息.. – Olaf

回答

0

int *x是指向int的指針。 int** yy定義爲指向指向int的指針,因此它指向一個指針,而後者指向一個int。例如:

int n = 42; 
int* x = &n; // points to n 
int** y = &x; // points to x, which points to n 

在這種情況下,y是指向指針的指針。第一個間接*y給你一個指針(在這種情況下爲x),然後第二個間接引用指針x,所以**y等於42

使用typedef小號讓一切看起來簡單,讓你意識到指針本身變量作爲任何其他變量,唯一的例外是他們店的地址,而不是數(值):

typedef int* pINT; 

int n = 42; 
pINT x = &n; 
pINT* y = &x; // y is a pointer to a type pINT, i.e. pointer to pointer to int 
0

如果您使用雙*您告訴編譯器,你要指向另一個指針的指針:

int x = 4; 
int *pointer = &x; 
int **pointer_pointer = &pointer; 
printf("%d\n",**pointer_pointer); // This should print the 4