我刚开始学习C,并且正在阅读K.N.的教科书。国王关于编程语言。在他关于字符串的章节中,他指出字符数组和字符指针在传递给函数方面几乎相同。但是,它们不可互换,其背后的原因之一是可以修改字符数组中的字符,而字符指针指向字符串文字。然而,在他的教科书的早些时候,他指出C无论如何都将字符串文字存储为一个字符数组,那么不会使字符指针和字符数组相同吗?
提前谢谢!
答案 0 :(得分:0)
当你声明一个像这样的字符数组时:
char str[]="My String";
然后,如果未将其声明为全局,则为堆栈内存中的数组分配内存。在堆栈内存中,您可以修改数组的包含。
但是当你声明一个指向字符串的指针并通过指定一个字符串来初始化它时:
char *ptr="My string";
然后它为堆栈内存中的指针分配内存,但是它保存了代码内存中无法修改的字符串的地址
但是,因为您使用的是指针而不是常量指针,并且它存储在堆栈中,因此您可以修改该指针意味着您可以将其指向另一个内存,此时您正在更改指针本身的包含。但是,您无法更改其指向的内存的包含,因为它指向只读内存。