首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

int *p=10和int *p = (int *)10有什么区别?

在C语言中,int *p=10int *p = (int *)10这两种写法在语法上都是不正确的,因为指针变量应该被赋予一个地址值,而不是一个整数值。不过,为了回答你的问题,我们可以从概念上理解这两种写法的区别。

int *p=10

这种写法试图将一个整数值10赋给一个指针变量p。这在C语言中是不合法的,因为指针应该存储内存地址,而不是具体的数值。如果编译器没有报错并生成了可执行文件,这通常意味着编译器进行了隐式类型转换,但这是一种未定义行为(Undefined Behavior),可能导致程序崩溃或其他不可预测的结果。

int *p = (int *)10

这种写法试图将整数值10强制转换为指向int类型的指针,并赋给指针变量p。虽然这种写法在语法上是合法的,但它同样是一种未定义行为。将一个整数值强制转换为指针类型,并不意味着该指针指向有效的内存地址。访问或操作这个指针指向的内存可能会导致程序崩溃或其他不可预测的结果。

正确的做法

如果你想让指针变量p指向一个特定的内存地址,应该这样做:

代码语言:txt
复制
int *p = (int *)malloc(sizeof(int));

这段代码使用malloc函数分配了一个int类型大小的内存,并将返回的地址赋给指针变量p。这样,p就指向了一个有效的内存地址,可以安全地进行读写操作。

总结

  • int *p=10int *p = (int *)10都是不合法的写法,会导致未定义行为。
  • 指针变量应该被赋予一个有效的内存地址,而不是整数值。
  • 使用malloc等内存分配函数来正确地分配和初始化指针变量。

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券