char
const char * arr = “123”;
//字符串123保存在常量区,const本来是修饰arr指向的值不能通过arr去修改,但是字符串“123”在常量区,本来就不能改变,
所以加不加const效果都一样
char * brr = “123”;(vs下不加const报错)
//字符串123保存在常量区,这个arr指针指向的是同一个位置,同样不能通过brr去修改”123”的值
const char crr[] = “123”;
//这里123本来是在栈上的,但是编译器可能会做某些优化,将其放到常量区
char drr[] = “123”; //保存在栈区 只有这个可以修改
//字符串123保存在栈区,可以通过drr去修改
运行分析
- const char * arr = “123” 和 char * brr = “123”都保存在常量区 值相同 猜测可能是处理器优化 索性
指向了同一地址
- 由于两者都分配在了常量区 只是指向他们的指针不同 所以
不能通过指针去修改常量区的字符串
- char* 和 const char* 指针的指向是可以修改的 例如 char* bbrr = “456”; brr = bbrr;
const char crr[] = “123”;明显与其他“123”的地址不同,因为其是字符串数组 const修饰数组不可修改。crr[0] = ‘2’提示crr是不可修改的左值
char crr[] 本身crr指向就是不可更改的 也不能++–
int *pp = new int(1);
int ppp[3];
ppp[0] = 2;
ppp[1] = 3;
ppp[2] = 4;
// ppp = pp; //不可
pp = ppp; //可
网上详细总计的char
const char *p1 = "Hello world"; // p1 指向的地址可更改 |

char
https://qianxunslimg.github.io/2022/04/14/char/