int num = 0, k = 0;
scanf("%d %d", &num, &k);
int* A = #
for (int i = 0; i < num; i++)
{
scanf("%d", &A[i]); //scanf("%d", A+i);
}
在这段代码中,我想把45132个整数放入数组A中
输入为
5 7
4 5 1 3 2
但在调试模式下
*A 4 int
*(A+1) 5 int
*(A+2) 1 int
*(A+3) 3 int
*(A+4) -858993460 int
*(A+5) -858993460 int
为什么*(A+4)
不是2?????
我尝试了num+1,但这不是最终的解决方案。
for (int i = 0; i < num+1; i++)
{
scanf("%d", &A[i]);
}
3条答案
按热度按时间lg40wkob1#
要定义一个数组,你需要
你的变量
A
是一个指向整数的指针,而不是一个数组。你可以把它当作一个数组,因为数组基本上是C中的指针。但是你从scanf()
写入的内存不是“分配”的。rks48beu2#
您的代码中没有数组。
A
是一个用num
的地址初始化的指针,它的类型为int
。然后,代码在
for
循环的第二次迭代中调用未定义行为,因为A
之后的内存不属于您。要定义一个数组,你可以这样写:
3bygqnnd3#
在C语言中,你确实需要为数组分配内存,但是在某些情况下,最初的代码可能看起来对前几个元素很有用
C编译器不会警告你超出数组界限,甚至在运行时你的代码也可能不会被终止,所以你并不总是能从简单的测试中看到你的错误,而这恰恰发生在原始代码中