在这段代码中:
const char * str = "hello world";
如果我理解正确,指针是4或8字节,我猜它将被分配在堆栈上。
但是,“hello world”的内存分配和存储在哪里呢?
或者说str
确切地指向什么?它没有被分配。通常存储在程序的代码段或堆栈上,具体取决于编译器。无论哪种方式,它指向一个以空字符结尾的字符数组。
实质上,这将被编译为你已经编写的代码:
const static char helloworld[12]
= {'h', 'e', 'l', 'l', 'o',' ','w', 'o', 'r', 'l', 'd', '\0'};
const char * str = helloworld;
数组通常会被放置在内存的某个只读区域,可能靠近可执行代码。
根据定义位置的不同,str 可能在堆栈或全局内存空间中。
C语言没有堆栈。C语言认为"hello world"
是一个字符串字面量,并且字符串字面量具有静态存储期。