C:使用char*const指针

Nik*_*nka 0 c pointers const char

在下面的程序中,p被声明为一个指针(它是常量BUT字符串不是).但程序仍然无法工作并突然停止说"untitled2.exe已停止工作".

#include<stdio.h>
#include<stdlib.h>

int main(){
    char * const p = "hello";
    *p = 'm';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种意外

Old*_*Pro 5

您收到Windows错误,因为您无效访问内存.在其他系统上,您可能会收到SEGFAULT或SEGV或总线错误.

*p = 'm';
Run Code Online (Sandbox Code Playgroud)

试图将常量字符串"hello"的第一个字母从"h"更改为"m";


ale*_*cov 5

虽然p它本身是指向非const对象的指针,但它指向一个字符串文字.字符串文字是一个对象,虽然const它的类型不合格,但它是不可变的.

换句话说,p指向一个不是const,但表现得好像的对象.

阅读更多关于ANSI/ISO 9899:1990(C90)的6.1.4节.