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

标签 c

<分区>

我是 C 的新手,目前我正在尝试了解指针的工作原理。

这是一个让我感到困惑的问题:

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

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

    i = 2;
    *ptr = 5;     
    printfn("%d",*ptr); 
    free(ptr);
}

然而,在 C 中声明字符串时,就像:

char *p = "Hello world"; 

无需分配内存。

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

最佳答案

char *p = "Hello world";

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

它没有名字并且有静态存储期限(意味着它在程序的整个生命周期内都存在);和一个类型为 pointer-to-char 的变量,称为 p,它使用未命名的只读数组中第一个字符的位置进行初始化。

关于c - 为什么声明字符串时不需要分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24202907/

相关文章:

c - ELF64加载和内存对齐

c - 读取失败,错误消息 "Invalid argument"

c - 带有说明符 "%g"的 printf 的精度

c - C中文字的生命周期

c - 处理函数和指针

c - 在 C 中打开文件 - 为什么它不加载所有矩阵或删除\n?

c - 通过数组的最有效方法?

parking 模拟的C程序没有给出输出

c - 程序运行并显示输出后段错误核心转储

c - 脑筋急转弯 : Pointer-reference-value