Pul*_*gar 0 c pointers character dynamic-memory-allocation
可以为字符指针分配任意字符串,但不能为整数指针分配整数。由于它们都是指针并包含地址。为什么在动态分配之前将 C 中的字符串分配给指针有效但整数无效。
#include<stdio.h>
int main()
{
char *s = "sample_string"; // valid
printf("%s\n", s);
int *p = (int)5; // invalid
printf("%d\n", *p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给出了输出:
sample_string
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
背后的原因是什么?虽然它们在 C++ 中都是无效的。
C 中没有“字符串类型”。根据 C 的定义,“字符串”是char末尾带有零字节的数组。
"sample_string"is的类型char[14],可以赋值给一个指针。
(int)5is的类型,int不能[1]。
发生分段错误是因为您正在访问无效的地址0x00000005。
[1]:技术上可以。但是,如果您想成功取消对该指针的引用,则必须注意该整数的地址值与该类型具有正确的对齐方式,并且指的是该类型的有效对象。这就是为什么如果您没有在赋值中显式地将该整数转换为指针类型,编译器会生成警告,以表明您确实知道自己在做什么。