最近学习了字符指针,然后遇到了这样一个题目,于是想着自己解释一遍,增加印象。
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "abc";
char str2[] = "abc";
const char* str3 = "abc";
const char* str4 = "abc";
if (str1 == str2)
printf("str1 == str2\n");
else
printf("str1 != str2\n");
if (str3 == str4)
printf("str3 == str4\n");
else
printf("str3 != str4\n");
return 0;
}
输出结果:
str1 != str2
str3 == str4
解释:
如图为赋值过程:
首先,我们要知道两点:
1.字符串给字符数组进行初始化赋值的时候,赋值的是字符串的内容,即将一个一个字符copy到数组内;
2.字符串给指针进行初始化赋值的时候,实际上赋值的是常量字符串的首地址。
所以在给字符数组str1和str2赋值时因为给的是常量字符串内容,即str1和str2是开辟出的不同空间的首地址,所以他们是不相等的;而给指针str3和str4赋值的时候,赋值的是常量字符串本身的首地址,所以他们是相同的。