2012-12-03 70 views
0

是否可以遞增傳遞給函數的數組?遞增數組指針

我有一個一維陣列A [4] = {10,20,30,40},我想調用的函數,並且遞增所述陣列以指向第三元件和從主打印()。

對於前:

int main() 
{ 
    int a[4] = {10,20,30,40}; 
    cout << *a; // 10 
    increment(); // function call 
    cout << *a; // 40 
} 

我們怎樣才能做到這一點。如果數組作爲一個指針傳遞,僅修改存儲在陣列的價值得到體現。如果我們必須增加函數中的數組,函數的原型是什麼?

+1

有很多關於數組的信息。你嘗試了什麼? –

+0

查找參考。或者從函數返回一個指針。最後可能是最好的,那麼你就不能松原來的「指針」。 –

+0

你是什麼意思「增加數組」?數組不是指針。數組是數組。獲取指向數組中一個元素的指針並增加_that_。 –

回答

2

替代的建議是:

#include <iostream> 

void foo(int *&p) // <-- take pointer by reference... 
{ 
    ++p; 
    ++p; 
} 

int main(void) 
{ 
    int a[] = {1,2,3,4}; 

    int*p = a; 

    std::cout << *p << std::endl; 

    foo(p); 

    std::cout << *p << std::endl; 

} 

使用第二指針訪問原始陣列和修改,在功能...

另外一種選擇是使用任一std::vector<int>std::array<int, 4>,然後通過一個迭代器功能(並得到它返回一個迭代器)...

0

不符合您當前的語法。但是,您可以從increment()返回新指針,並將其存儲在另一個變量中。

int main() 
{ 
    int a[4] = {10,20,30,40}; 
    cout << *a; 
    int* new_a = increment(a) 
    cout << *new_a; 
} 
0

你可以在你的指針POS接入銀行足球比賽這樣:

int main() { 
    int a[4] = {10,20,30,40}; 
    cout << *a;  print ---> 10 
    cout << *(a + 3); print ---> 40 
} 

你想要什麼你不能沒有丟失信息

0

在你的程序分指針在編譯時你的程序的數據空間(或鏈接時間取決於你的想法)。

如果您有類似

void function(int* &x) { 
    x+=2; 
} 

int main() { 
    int *a = new int(4); 
    int *b = a; 
    a[0] = 10; a[1] = 20; a[2] = 30; a[3] = 40; 
    cout << *a; 
    function(b); 
    cout << *b; 
    delete a; 
} 

GNU G ++會檢查,而不是讓你來移動指針變量,因爲沒有更多的指針將被引用到這個內存塊的頭。哈哈