在c中打印数组的内容

时间:2012-05-07 01:45:04

标签: c arrays pointers printf

我有这个非常简单的代码:

#include <stdio.h>
#include <stdlib.h>


int maxArr(int *arr)
{
    int i=0;
    for (i = 0; i < 10; ++i)
    {
        printf("%d\n",arr[i]);
    }
    return 0;
}


int main()
{
    int* i = {0,1,2,3,4,5,6,7,8,9};
    maxArr(&i);
    return 0;
}

但不是打印0,1,2,3,4,...,9

我得到了这个:

0
0
0
0
0
0
1809693728
32767
203279940
1

为什么?

4 个答案:

答案 0 :(得分:2)

i的初始化更改为:

int i[10] = {0,1,2,3,4,5,6,7,8,9};

...并使用maxArray致电i;即maxArray(i)

答案 1 :(得分:1)

您需要传递i,而不是&i

int main()
{
    int* i = {0,1,2,3,4,5,6,7,8,9};
    maxArr(i);
    return 0;
}

而不是遍历数组,而是从&i开始迭代内存地址。

答案 2 :(得分:1)

你给错了指针 - 你得到错误的数据(在最好的情况下):

maxArr(&i);

应该是

maxArr(i);

我想知道您是如何通过int **而不是int *

收到警告的

答案 3 :(得分:1)

你做错了。

这里我已经指出了数组的第一个元素。

int* i = {0,1,2,3,4,5,6,7,8,9};
maxArr(&i);

我存储在一个地方说内存位置xyz,而在xyz你有另一个存储位置存储,这是数组的第一个元素的位置说abc 所以当你传递&amp; i时,它会发送i的位置,即xyz而不是abc。

要更正它,请将代码更改为

int* i = {0,1,2,3,4,5,6,7,8,9};
maxArr(i);