2013-11-10 128 views
-1

我想知道如果有一種方法可以通過在C.存儲在地址相對於指針

int *p; 
p = NULL; // is possible 

int *p, *q; 
p + 1 = NULL; // ERROR: lvalue required as left operand of assignment 
p + 1 = q;  // ERROR: lvalue required as left operand of assignment 
使用指針運算存儲在地址相對於指針的一個NULL值或地址的一個地址或NULL
+0

我不認爲第一個('p = NULL')在做你認爲的事情。可以肯定的是,你認爲它在做什麼? – ughoavgfhw

+0

'(p + 1)= NULL'可能工作,我從來沒有嘗試過這樣的事情。正如吉姆所示,使用數組索引通常是首選方法。假設您可以訪問內存中的空間,存儲空值不應該成爲問題。 – IllusiveBrian

+0

我正在嘗試使p下一個單詞指向NULL。基本上我試圖通過將地址存儲到下一個指針指向前一個指針旁邊的一個單詞來實現鏈接列表。 – shaveenk

回答

3

你需要做這樣的事情,假設p指向您有權寫入內存有效的一塊:

int **p = something; 
p[1] = NULL; 
p[1] = q; 
+0

不使用指向指針的指針是不可能的? – shaveenk

+0

當然,如果你使用了cast,那麼你可能會這樣做,而不是使用正確的類型? –

0

這是不完全清楚,我你的要求。你可以設置一個指向NULL值的指針,你可以指向一個NULL值。您不能將指針設置爲NULL,然後嘗試將其用作值的目標。下面是一個使用指針運算

int *p = (int*) malloc(3 * sizeof(int)); 
*p = 0; // dereference p and set it's value to 0 
*(p + 1) = 1; // add 1 sizeof(int) to p and set it's value to 1 

NULL的例子只是爲0

+0

我只將它設置爲空作爲未分配的指示符。當我有一個值存儲在那裏時,我希望它指向它存儲的地址。 q在上面的例子中。 – shaveenk

+0

這聽起來很像你想要一個指針指針(int ** p,* q;)不幸的是,在你的例子中,p永遠不會被設置爲很難知道你的意圖。如果你想要一個指向指針的指針,你仍然可以像這樣:*(p + 1)= q; – Dweeberly

0
int *p, *q; 

*(unsigned int *)(p + 1) = (intptr_t)NULL; 
// or 
*(unsigned int *)(p + 1) = (intptr_t)q; 

別名這似乎爲我工作。