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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:13:14