2015-07-20 86 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个元素的地址。只需打印即可,不需要&。

相关问题