1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 字符串常量和字符串变量

字符串常量和字符串变量

时间:2023-05-04 10:08:04

相关推荐

字符串常量和字符串变量

字符串常量

有些编译器把多个相同的字符串常量看成一个(节省空间),有些则不进行此优化

//1、字符串常量 vs下是可以共享的void test01(){char * p1= "hello world";char * p2 = "hello world";char * p3 = "hello world";printf("%d\n",&"hello world");printf("%d\n", p1);printf("%d\n", p2);printf("%d\n", p3);}

字符串常量不可修改(vs环境下)

void test01{char * p1 = "hello world";//字符串常量,指针p1指向了这个字符串的首地址printf("%d\n", p1);printf("%c\n", p1[0]);//p1[0] = 'W'; //不允许修改 常量区内容printf("%s\n",p1);//无法打印,程序出错}

这里的字符串“hello world”是在常量区中的,定义了一个指针变量p1指向这块常量区,但是常量区中的数据是不允许修改的;

上述案例中字符串常量修改失败,但这不是绝对的

有些编译器把多个相同的字符串常量看成一个(节省空间),有些则不进行此优化ANSI C中规定:修改字符串常量,结果是未定义的有些编译器可修改字符串常量,有些编译器则不可修改字符串常量

字符串变量

void test02{char p1[] = "hello world";printf("%d\n", p1);printf("%c\n", p1[0]);p1[0] = 'W'; //允许修改printf("%s\n",p1);//打印输出Wello world}

这里的p1是一个字符数组,相当于字符串变量,字符串“hello world”是在常量区中,但是函数调用的时候定义了一个字符数组p1用来存放字符串,从常量区拷贝了一份放在了栈区;实际修改并不是常量区中的那个“hello world”,而是修改栈区字符数组中的数据,所以可以修改成功,正常打印输出;

总结:尽量不要去修改字符串常量;一般情况下字符串常量不可修改,强制修改程序报错或崩溃,但某些编译器下允许修改;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。