例如:
const char* f = "123";
据我所知,f
将地址作为其值。但为什么?它不应该产生错误吗?
答案 0 :(得分:3)
指针的值不是字符串,而是字符串文字中第一个字符的内存地址。
这是足够的信息,因为字符串文字是空终止的。
会发生什么是在内存中创建大小(字符数)+1的字符数组。数组中最后一个字符的值是'\0'
(字面上所有位为零),它表示字符串文字的结尾,因此读取该数组的代码顺序知道没有超过该索引。
答案 1 :(得分:1)
当您执行程序时,文字字符串"123"
将从程序文件复制到进程的内存中。通常,文字放在只读存储器中。这就是指向字符串文字时const
所需的原因。 f
指向文字的第一个字符。
const char *f = "123";
// f[0] is '1'
// f[1] is '2'
// f[2] is '3'
// f[3] is '\0'