如何使用scanf将整数输入数组?

xesrikrc  于 2023-04-05  发布在  其他
关注(0)|答案(3)|浏览(141)
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]);
}
lg40wkob

lg40wkob1#

要定义一个数组,你需要

int A[num];

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

rks48beu

rks48beu2#

int* A = &num;

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

int A[ /* Number of elements */ ]
3bygqnnd

3bygqnnd3#

在C语言中,你确实需要为数组分配内存,但是在某些情况下,最初的代码可能看起来对前几个元素很有用
C编译器不会警告你超出数组界限,甚至在运行时你的代码也可能不会被终止,所以你并不总是能从简单的测试中看到你的错误,而这恰恰发生在原始代码中

相关问题