C/C++中字符指针与字符数组对同一数据的修改
写本博客的起源在于,有一天忽然不清楚,为什么对字符指针指向的数据无法进行修改,而字符数组却可以进行修改
推荐一个文章!!!
简单说就是,字符指针指向的数据存于常量区,而常量区为只读属性,所以无法对其进行修改;字符数组,本质就是一个数组,是有自己的数据空间,存于栈上,所以可以进行修改。
例如 char p[] = "ABC"
,其中“ABC”
是存于常量区,但因为p
为数组,有自身空间,所以系统会把常量区中的“ABC”
拷贝至该空间中,如此可对其数据进行修改,但修改的是p
数组空间里的,常量区中的并未修改~!
而 char* p = "ABC"
,同理“ABC“
是在常量区,此时的p保存的是常量区中”ABC“
的首地址,所以只对其元素进行读是可以,但如果进行修改则违反了常量区只读的属性,从而会报错!