为什么是:
char *ptr = "Hello!"
Run Code Online (Sandbox Code Playgroud)
不同于:
char ptr[] = "Hello!"
Run Code Online (Sandbox Code Playgroud)
具体来说,我不明白为什么你可以使用(*ptr)++来改变数组中'H'的值,而不是指针.
谢谢!
Mic*_*urr 29
您可以(通常)使用表达式(*ptr)++来更改ptr指向何时ptr是指针而不是数组的值(即,如果ptr声明为char* ptr).
但是,在您的第一个示例中:
char *ptr = "Hello!"
Run Code Online (Sandbox Code Playgroud)
ptr 指向文字字符串,并且不允许修改文字字符串(它们实际上可以存储在不可写的存储区中,例如ROM或标记为只读的存储页).
在你的第二个例子中,
char ptr[] = "Hello!";
Run Code Online (Sandbox Code Playgroud)
声明了数组,初始化实际上将字符串文字中的数据复制到分配的数组内存中.那个数组内存是可以修改的,所以(*ptr)++有效.
注意:对于第二个声明,ptr标识符本身是数组标识符,而不是指针,并且不是'左值',因此无法修改(即使在大多数情况下它很容易转换为指针).例如,表达式++ptr无效.我认为这是其他一些答案试图提出的观点.
| 归档时间: |
|
| 查看次数: |
9927 次 |
| 最近记录: |