2015-07-20 64 views
0

我是C++的新手,需要幫助。我想打印「C」的值,但它仍然打印它的地址。這裏是我的代碼:爲什麼我的代碼打印地址而不是數組內容?

#include <iostream> 
using namespace std; 



int* test (int a[5], int b[5]) { 
    int *c = new int[5]; 
    for (int i = 0; i < 5; i++) c[i] = a[i]+b[i]; 
    return c; 
} 


int main() { 
    int A[5] = {22, 33, 44, 55, 66}; 
    int B[5] = {22, 33, 44, 55, 66}; 
    int* C[10] = {test(A,B)}; 

    for (int i = 0; i < 10; i++) cout<< &C[i] <<endl; 

    return 0; 
} 

感謝它的進步。

+1

也停止使用'new []'。這是一個8行程序,你已經設法泄漏。改用'std :: vector'。這也將解決這個'int * C [10] = {test(A,B)}'的錯誤。 –

+0

我希望你能理解什麼時候結束,你失去了'&'你仍然要打印地址(其中10個;你的分配和9個NULL)。我相當有信心,這不是你的意圖。 – WhozCraig

+0

@BaummitAugen,我不確定這是什麼意思。反正tnx,我會谷歌它。 – kuki

回答

1

就在這行

for (int i = 0; i < 10; i++) cout<< &C[i] <<endl; 

擺脫&,因此它只是

for (int i = 0; i < 10; i++) cout<< C[i] <<endl; 

&運營商在這方面的字面意思是你想利用該對象的地址,所以它毫不奇怪,這就是它的輸出。

+0

將所有值打印爲** 0 **,內嵌爲22,33,44 ...等 – kuki

+0

由於您的'測試'功能不正確,並且包含一些錯誤,包括內存泄漏 – CoryKramer

+0

這個acutally是我的問題的答案,所以我會將其標記爲答案。 – kuki

2

第一個int* C[10] = {test(A,B)};應該是int * C = test(A,B);當你在函數中創建數組並返回一個指向它的指針時。其次,如果您撥打new[],並且每次撥打電話new[],都應該撥打電話號碼delete[],然後在主號碼末尾撥打delete [] C。最後,您正在使用cout<< &C[i] <<endl;中的運營商地址(&),因爲它的名稱會告訴您地址C[i]而不是其價值。

0

&給出了變量的地址。因此,& C [i]給出了陣列C的第i個元素的地址。只需打印即可,不需要&。

相關問題