字符串常量与变量

来源:互联网 发布:金税盘备份的数据 解压 编辑:程序博客网 时间:2024/05/16 16:08

检查下列程序是否有错误

#include <stdio.h>#include <stdlib.h>int main(){char *s = "AAAA";printf("%s\n", s);s[0] = 'B';printf("%s\n", s);getchar();return 0;}

运行后 

sort.exe 中的 0x012235e3 处未处理的异常: 0xC0000005: 写入位置 0x01225740 时发生访问冲突

 "AAAA" 是常量,s是指针,指向常量,所以再对是s[0]赋值不合适
</pre>再看下一个<p></p><p></p><pre name="code" class="html">#include <stdio.h>#include <stdlib.h>int main(){char str[] = "AAAA";char *s = str;s[0] = 'B';printf("%s\n", s);getchar();return 0;}
运行结果: BAAA

s指向变量,可以赋值


再看下一个

#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";char *str5 = "abc";char *str6 = "abc";const char *str7 = "abc";const char *str8 = "abc";printf("%d\n",str1 == str2);//0printf("%d\n",str3 == str4);//0printf("%d\n",str5 == str6);//1printf("%d\n",str7 == str8);//1getchar();return 0;}
1)str1 和str2 不相等,两个数组是变量,为了保证他们独立,他们的地址是不一样的,否则,一个数组改变,另外一个数组也改变

2)str3和str4可能相等也可能不等,两个都是数组常量,不可以修改,有的编译器可以优化,让两个地址一样,有的则保留原来的风格,两个地址不一样

3)str5和str6相等 “abc”在内存中是常量,指向他的指针地址一样

4)同3)




0 0
原创粉丝点击