我有这个非常简单的代码:
#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
为什么?
答案 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);