c语言字符数组指针初始化(C语言用指针形式初始化字符串数组时为什么要用const,用了会会怎样,可以不用吗(+_+))

本文目录
C语言用指针形式初始化字符串数组时为什么要用const,用了会会怎样,可以不用吗(+_+)
1 可以不用const,例如:
char aa = "abc";
aa = ’d’;
printf("%s\n", aa); //这里打印的结果是dbc,aa的大小是4,abc+一个\0
2 const char *aa = "abc";
aa = ’d’; //这个时候是错误的,因为aa是一个指针,指向一个字面常量“abc”,这个字面常量是保存在程序的全局静态数据区,不可更改,默认就是const的,所以char *aa = "abc";是错误的。
3 const char aa = "abc";
aa = ’d’; //这里也会报错,因为是const的aa指向的值不可更改。
const char *aa = "abc";
aa = "bcd"; //正确,const 类型 * ptr = value,这样的指针,指向的值不可变,但是指针本身可以重新指向其他地方。
4 怎么才能更改const char aa = "abc";中“abc”的值呢?这个时候aa指向的内存在程序的全局内存上(aa是在全局变量)或者在栈内存上(aa是局部变量),非全局静态数据区,所以我们可以强制转换:
const char aa = "abc";//但是const char *aa = "abc";这种情况不行,语法没有问题,运行报错,操作系统应该会对静态数据区做保护。
printf("%s %d\n", aa, sizeof(aa));
int bb = (int)aa;
char *ptr = (char*)bb;
ptr = ’d’;
printf("%s\n", aa);
C++字符指针数组的初始化及赋值问题
只有在定义的同时这样(a="what
for")赋值才行,其他不行,这是c语言规定的
要先定义然后再在其他地方赋值的话,就只能一个一个元素单独赋值,不过要是想达到同样的效果(类似a="what
for"),对于字符串数组,可以用库函数strcpy(...)函数赋值,其他的话,你可以自己写函数给他们赋初值!!
c语言 字符指针的初始化
char *a="china"这里在定义变量的时候就对指针变量进行了初始化,china*a;a="china";这里的a="china"实际上就是将字符串"china"所占的存储空间的首地址赋给了字符指针变量a。

更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40







