请问为什么我的指针数组在输入数值时必须要输入六个数字

下面是我的代码,我的数组大小是5,但为什么要输入六个数字才能输出数组

img

img

第10行 :scanf("%d\t", &p[i]); 这里格式控制符里多了 '\t' 符,应去除,改为:scanf("%d", &p[i]);

for ...
{
fflush(stdin);
scanf("%d", &p[i]);
}

【以下回答由 GPT 生成】

这是因为在代码中,p指针实际上是指向数组arr的首元素的地址,而不是整个数组。因此,&(p[i])代表的是从arr数组首元素地址开始的偏移量为i的元素的地址。而在循环中,i的值取自0到4,所以只需要输入5个数字即可正确输出数组。

检查一下你的输入,确保你只输入了5个数字。如果你输入了6个数字,程序将会访问到数组外的内存,并且导致未定义的行为。

这里是更新后的代码,修复了输入6个数字的问题:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int arr[5];
    int *p = arr;
    for(int i = 0; i < 5; i++) {
        scanf("%d", &(p[i]));
    }

    for(int j = 0; j < 5; j++) {
        printf("%d ", p[j]);
    }

    return 0;
}

请注意,我删除了scanf语句中的制表符\t,这是因为scanf默认会跳过空白字符,包括制表符,所以不需要显式地输入制表符。通过这样的修改,现在你只需要输入5个数字即可正确输出数组。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^