将字符串分配给 char 指针是有效的,但将整数分配给 int 指针在 C 中无效。为什么?

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++ 中都是无效的。

Dev*_*lar 5

C 中没有“字符串类型”。根据 C 的定义,“字符串”是char末尾带有零字节的数组。

"sample_string"is的类型char[14],可以赋值给一个指针。

(int)5is的类型,int不能[1]

发生分段错误是因为您正在访问无效的地址0x00000005。


[1]:技术上可以。但是,如果您想成功取消对该指针的引用,则必须注意该整数的地址值与该类型具有正确的对齐方式,并且指的是该类型的有效对象。这就是为什么如果您没有在赋值中显式地将该整数转换为指针类型,编译器会生成警告,以表明您确实知道自己在做什么。

  • @PulkitBhatnagar:是的,[他的链接](/sf/ask/181296461/)确实*准确地*回答了这个问题。 (2认同)