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
相关产品推荐
相关产品推荐

