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中
输入为
五、七
4 5 1 3 2
但在int debug模式下,
*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条答案
按热度按时间kb5ga3dv1#
要定义一个数组,你需要
你的变量
A
是一个指向整数的指针,而不是一个数组。你可以把它当作一个数组,因为数组基本上是C中的指针。但是你从scanf()
写入的内存不是“分配”的。5uzkadbs2#
您的代码中没有数组。
A
是一个用num
的地址初始化的指针,它的类型为int
。然后,代码在
for
循环的第二次迭代中调用未定义行为,因为A
之后的内存不属于您。要定义一个数组,你可以这样写:
piok6c0g3#
在C语言中,你确实需要为数组分配内存,但是原始代码仍然可以处理前 * 4 * 个整数(大多数情况下),因为声明一个指向
int
的指针只会创建足够的内存这就是为什么原始代码适用于
A[0]
、A[1]
、A[2]
和A[3]
,但A[4]
和A[5]
包含垃圾的原因