为什么字符串文字与指针相当?

Old*_*ool 6 c string-literals

如果我们说:

 char *p="name";
Run Code Online (Sandbox Code Playgroud)

那我们该怎么办呢

if(p=="name"){
 printf("able"};//this if condition is true but why?
Run Code Online (Sandbox Code Playgroud)

因为"name"这里是一个字符串文字,并且p是一个保存字符串基址的指针,那么为什么上述语句工作正常?

Sha*_*our 7

未指定的行为是否可以认为相同的字符串文字相同,因此具有相同的地址.所以这不是可移植的行为.从草案C99标准部分6.4.5 字符串文字:

如果这些数组的元素具有适当的值,则这些数组是否不同是未指定的.[...]

如果你想比较两个字符串,你应该使用strcmp.