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

C语言赋值触发assignment makes pointer from integer without a cast警告如何解决

问题根因

触发编译警告和输出随机值的核心是同一错误:**混淆了指针本身和指针指向内存的操作逻辑错误:

  • p 是 int* 类型的指针变量,存储的是内存地址,p = (i + 1) * 100; 这行代码是直接把整数值当成内存地址赋值给指针本身,既触发了-Wint-conversion类型转换警告;同时也修改了指针原本的指向,没有对原nums数组的内存空间做任何写入操作,所以后续打印数组时输出的都是栈空间未初始化的随机值。
修复方案

你需要使用解引用操作符*访问指针指向的内存单元,将数值写入对应内存,修改后完整代码如下:

#include<stdio.h>

int main() {
    int nums[8], i;
    int *p;
    p = nums;
    for (int i = 0; i < 8; ++i)
    {
        // *p表示给p当前指向的数组元素赋值,而非修改指针本身的地址值
        *p = (i + 1) * 100;
        p++;
    }
    // 测试打印数组内容
    for (i = 0; i < 8; ++i) {
        printf("%d ", nums[i]);
    }
    return 0;
}

运行后会输出预期的100 200 300 400 500 600 700 800。

补充说明

如果不需要练习指针操作,也可以直接通过数组下标赋值,写法更直观:

for (int i = 0; i <8; ++i) {
    nums[i] = (i+1)*100;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:01