C语言 我有一个整数数组输入问题

dldeef67  于 2023-03-28  发布在  其他
关注(0)|答案(3)|浏览(132)
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]);
}
kb5ga3dv

kb5ga3dv1#

要定义一个数组,你需要

int A[num];

你的变量A是一个指向整数的指针,而不是一个数组。你可以把它当作一个数组,因为数组基本上是C中的指针。但是你从scanf()写入的内存不是“分配”的。

5uzkadbs

5uzkadbs2#

int* A = &num;

您的代码中没有数组。A是一个用num的地址初始化的指针,它的类型为int
然后,代码在for循环的第二次迭代中调用未定义行为,因为A之后的内存不属于您。
要定义一个数组,你可以这样写:

int A[ /* Number of elements */ ]
piok6c0g

piok6c0g3#

在C语言中,你确实需要为数组分配内存,但是原始代码仍然可以处理前 * 4 * 个整数(大多数情况下),因为声明一个指向int的指针只会创建足够的内存
这就是为什么原始代码适用于A[0]A[1]A[2]A[3],但A[4]A[5]包含垃圾的原因

相关问题