检查下列程序是否有错误
#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);//0
printf("%d\n",str3 == str4);//0
printf("%d\n",str5 == str6);//1
printf("%d\n",str7 == str8);//1
getchar();
return 0;
}
1)str1 和str2 不相等,两个数组是变量,为了保证他们独立,他们的地址是不一样的,否则,一个数组改变,另外一个数组也改变
2)str3和str4可能相等也可能不等,两个都是数组常量,不可以修改,有的编译器可以优化,让两个地址一样,有的则保留原来的风格,两个地址不一样
3)str5和str6相等 “abc”在内存中是常量,指向他的指针地址一样
4)同3)