2015-04-22 93 views
3

返回嘿,我嘗試了一下用C/C++和指針 while reading stuff here增加指針的函數

我自己做了一個函數在某個地方在全局數組的指針返回INT。

int vals[] = { 5, 1, 45 }; 

int * setValue(int k) { 
    return &vals[k]; 
} 

但是我能做到這一點

int* j = setValue(0); 
j++; 
*j = 7; 

操縱陣列

但:

*(++setValue(0)) = 42; 

din't工作。 然而,請注意*setValue(0) = 42;作品

從我的理解我調用函數,並獲得一些指針我增加它,使其指向我的數組中的第二個元素。最後,我遵循指針併爲它所指向的整數指定一個新值。

我發現C++指針和引用可能有點混淆,但也許有人可以解釋我這種行爲。

編輯: 這個問題是不是Increment, preincrement and postincrement

重複,因爲它是不是與前,後遞增,而是約上是一個函數的返回指針增量。

EDIT2:

調整功能

int ** setValue(int k) { 
    int* x = &vals[k]; 
    return &x; 
} 

您可以使用

*(++(*setValue(1))) = 42; 
+1

這顯然不是鏈接的問題的副本。 – mjs

+0

這不是重複的嗎?不應該'j = setValue(0); J ++; * j = 7;'相當於'*(++ setValue(0))= 7;'而不是'*(setValue(0)++)= 7;'(注意前後增量)。 – cpburnz

+0

你是對的,但是既不是'*(++ setValue(0))= 7;'也不是'*(setValue(0)++)= 7;'按照@Eregrith的解釋 你提到的並不是爲了是真正的問題,但它是一個內部的錯誤 – xuma202

回答

5

你不能上的東西叫一元運算符(++)不是一個變量。 setValue(0)被視爲一個值。

所以,

*(setValue(0)++) = 42; 

應該

*(setValue(0) + 1) = 42; 
+0

謝謝。 我現在注意到,調整函數返回一個int ** 可以使用 *((* setValue(1))++)= 42; – xuma202