C语言指针初始化报错:int转int*无效,原因及解决方法
指针初始化报错:
invalid conversion from 'int' to 'int*' 的原因与解决方法 错误原因
你代码里的0x0010是int类型的字面常量,而ptr1、ptr2分别是int*和double*类型的指针变量。C语言的类型系统不允许直接将整数隐式转换为指针类型(唯一例外是整数0可以隐式转为NULL指针),编译器会严格检查这种类型不匹配的赋值操作,因此抛出了类型转换错误。
解决方法
需要通过显式强制类型转换,把整数常量转换成对应的指针类型,明确告知编译器你清楚当前的类型转换操作。修改后的代码如下:
#include <stdio.h> int main(void) { int * ptr1 = (int*)0x0010; // 显式转为int*类型 double * ptr2 = (double*)0x0010; // 显式转为double*类型 printf("%p %p\n", ptr1+1, ptr1+2); // 偏移4字节、8字节 printf("%p %p\n", ptr2+1, ptr2+2); // 偏移8字节、16字节 printf("%p %p\n", ptr1, ptr2); ptr1++; // 偏移4字节 ptr2++; // 偏移8字节 printf("%p %p\n", ptr1, ptr2); return 0; }
额外注意事项
- 直接使用硬编码的内存地址(比如
0x0010)在实际程序中非常危险,该地址大概率属于操作系统保留内存区域,运行程序时可能触发段错误。这段代码仅适合作为指针偏移规则的演示用途。 - 部分编译器可能会针对非对齐地址发出警告(比如
double*指向的地址未按8字节对齐),若需消除警告,可添加对应编译器指令或确认地址的合法性。
内容的提问来源于stack exchange,提问作者Kim Minseo
相关产品推荐
相关产品推荐

