char *str1 = "hello";
char str2[] = "hello";
if (str1 == "hello")
printf("ok1\n");
if (str2 == "hello")
printf("ok2\n");
if (strcmp(str1, "hello"))
printf("ok3\n");
if (strcmp(str2, "hello"))
printf("ok4\n");
一道基础题,知道 ==比较地址,strcmp比较内容。
请各位大神指教为何输出的是 ok1 谢谢!
"hello"是字符串常量,编译器会进行优化:
由于所有的"hello"都是相同的,整个程序中只需要有一个"hello"字符串。然后所有引用"hello"这个字符串的指针变量都赋值成相同的地址。
所以:
char *str1 = "hello";和"hello"的地址是相同的。
对于:char str2[] = "hello";,这里str2并不是指针,类型里已经说明它是一个数组,所以这会是另一个内存地址,于是str2与"hello"的地址是不同的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。