在C语言中,int *p=10
和int *p = (int *)10
这两种写法在语法上都是不正确的,因为指针变量应该被赋予一个地址值,而不是一个整数值。不过,为了回答你的问题,我们可以从概念上理解这两种写法的区别。
这种写法试图将一个整数值10
赋给一个指针变量p
。这在C语言中是不合法的,因为指针应该存储内存地址,而不是具体的数值。如果编译器没有报错并生成了可执行文件,这通常意味着编译器进行了隐式类型转换,但这是一种未定义行为(Undefined Behavior),可能导致程序崩溃或其他不可预测的结果。
这种写法试图将整数值10
强制转换为指向int
类型的指针,并赋给指针变量p
。虽然这种写法在语法上是合法的,但它同样是一种未定义行为。将一个整数值强制转换为指针类型,并不意味着该指针指向有效的内存地址。访问或操作这个指针指向的内存可能会导致程序崩溃或其他不可预测的结果。
如果你想让指针变量p
指向一个特定的内存地址,应该这样做:
int *p = (int *)malloc(sizeof(int));
这段代码使用malloc
函数分配了一个int
类型大小的内存,并将返回的地址赋给指针变量p
。这样,p
就指向了一个有效的内存地址,可以安全地进行读写操作。
int *p=10
和int *p = (int *)10
都是不合法的写法,会导致未定义行为。malloc
等内存分配函数来正确地分配和初始化指针变量。领取专属 10元无门槛券
手把手带您无忧上云