You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中能否将scanf与*(array + i)指针写法配合使用?

关于在scanf中使用*(array + i)的疑问解答

嘿,这个问题问得很到位!我来帮你把这个点讲明白~

首先得回忆一下scanf的核心要求:它需要接收变量的地址,这样才能把输入的值写入到对应的内存位置里。而你已经知道array[i]和*(array + i)是等价的——这俩都是数组第i个元素的值,不是地址。

那你写的scanf("%i", *(array + i))为啥不对呢?因为这里的*(array + i)是个int类型的数值,而scanf的%i格式符需要的是int*类型的指针(也就是地址),类型不匹配会直接导致未定义行为,程序大概率会崩溃或者出现奇怪的结果。

那正确的用法是什么?其实很简单:array + i本身就是第i个元素的地址!

因为数组名array在大多数场景下会退化为指向数组第一个元素的指针,array + i就是指针向后偏移i个int长度的位置,完全等价于&array[i]。所以你只需要把代码写成这样:

scanf("%i", array + i);

给你举个完整的示例代码,方便你理解:

#include <stdio.h>

int main() {
    int nums[3];
    
    // 用array + i的方式读取输入
    for (int i = 0; i < 3; i++) {
        printf("请输入第%d个数字:", i+1);
        scanf("%i", nums + i);
    }
    
    // 用*(array + i)的方式输出验证
    printf("你输入的数字是:");
    for (int i = 0; i < 3; i++) {
        printf("%i ", *(nums + i));
    }
    return 0;
}

总结一下:

  • *(array + i) = array[i]:表示数组第i个元素的值,适合用在printf这类需要读取值的场景
  • array + i = &array[i]:表示数组第i个元素的地址,适合用在scanf这类需要写入值的场景

内容的提问来源于stack exchange,提问作者user9466449

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:00:58