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)
为什么会出现这种意外
您收到Windows错误,因为您无效访问内存.在其他系统上,您可能会收到SEGFAULT或SEGV或总线错误.
*p = 'm';
Run Code Online (Sandbox Code Playgroud)
试图将常量字符串"hello"的第一个字母从"h"更改为"m";
虽然p它本身是指向非const对象的指针,但它指向一个字符串文字.字符串文字是一个对象,虽然const它的类型不合格,但它是不可变的.
换句话说,p指向一个不是const,但表现得好像的对象.
阅读更多关于ANSI/ISO 9899:1990(C90)的6.1.4节.
| 归档时间: |
|
| 查看次数: |
760 次 |
| 最近记录: |