0

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

#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

4 回答 4

2

将您的初始化更改i为:

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

...并调用maxArrayjust i; 即maxArray(i)

于 2012-05-07T01:48:52.287 回答
1

你需要通过i,而不是&i

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

您不是遍历数组,而是遍历从&i.

于 2012-05-07T01:46:18.267 回答
1

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

maxArr(&i);

应该

maxArr(i);

我想知道你怎么没有收到通过int **而不是警告int *

于 2012-05-07T01:46:19.660 回答
1

你这样做是不对的。

这里 i 已经指向数组的第一个元素。

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

i 存储在某处,例如内存位置 xyz,而在 xyz,您存储了另一个内存位置,即数组的第一个元素的位置,例如 abc,因此当您传递 &i 时,它会发送 i 的位置,即 xyz 而不是 abc。

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

int* i = {0,1,2,3,4,5,6,7,8,9};
maxArr(i);
于 2012-05-07T01:51:49.227 回答