为什么在声明字符串时不需要分配内存

J.L*_*J.L 1 c

我是C的新手,目前我正在努力了解指针是如何工作的.

这是一个困扰我的问题:

据我所知,在为指针赋值之前,你应该为该指针分配一定的内存(如果我错了,请纠正我:)),如下面的代码:

int main(void) {
    int i;
    int * ptr = (int *)malloc(sizeof(int));

    i = 2;
    *ptr = 5;     
    printfn("%d",*ptr); 
    free(ptr);
}
Run Code Online (Sandbox Code Playgroud)

但是,在C语句中声明字符串时,就像:

char *p = "Hello world"; 
Run Code Online (Sandbox Code Playgroud)

无需分配内存.

是什么原因,它是如何工作的?如果我遗失了什么,请提醒我.

Jay*_*hoi 8

char *p = "Hello world";

你创建了一个指针并将其指向一个常量字符串.编译器将其放在标记为只读的内存部分中.

它没有名称,并且具有静态存储持续时间(意味着它在程序的整个生命周期中存在); 和一个名为pointer-to-char的变量,称为p,用该未命名的只读数组中第一个字符的位置初始化.