111指针问题?-灵析社区

强哥喝假酒

![屏幕截图 2023-10-28 135801.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241118/1be356c37a112ecc5ff44f132900e8ba.png) 指针不是存放首地址吗,怎么不一样呢

阅读量:23

点赞量:0

问AI
在C语言中,指针确实用于存储变量的地址。在你提供的代码片段中,有几个问题需要澄清: 1. "char *p1 = f"abcde";" 和 "char *p2 = ("abcd");" 这两行代码中的字符串字面量语法是错误的。正确的语法应该是去掉"f"和多余的括号,例如 "char *p1 = "abcde";"。 2. 字符串字面量 ""abcde"" 和 ""abcd"" 在编译时会被放置在程序的只读数据段中,它们各自占据不同的内存地址。因此,"p1" 和 "p2" 指向的地址不会相同。 3. 在 "if(p1 == p2)" 这个条件判断中,比较的是两个指针的值,即它们指向的地址。由于 "p1" 和 "p2" 分别指向两个不同的字符串,它们的地址不会相同,因此 "if" 条件判断为假。 4. 代码中的 "fprintf("11")" 是错误的,"fprintf" 需要一个文件指针作为第一个参数,通常是指向 "stdout" 的 "stdout" 或者指向 "stderr" 的 "stderr"。 以下是修正后的代码: c #include int main() { char *p1 = "abcde"; char *p2 = "abcd"; if(p1 == p2) { printf("hehe"); } else { fprintf(stdout, "11"); } return 0; } 在这个修正后的代码中,"if" 条件将始终为假,因此 "printf("hehe");" 这行代码不会执行,而 "fprintf(stdout, "11");" 将会被执行,向标准输出打印字符串 "11"。实际上,由于 "p1" 和 "p2" 指向不同的字符串,条件判断 "p1 == p2" 将总是为假。
,
因为他们确实在两个不同的地方。 整个电脑里,"abcd" 这四个连续的字符不是只能存在一份的,何以有很多份,于是地址就不一样了。 而且,p2 的 "abcd" 后面是 '/0' ,p1 的 "abcd" 后面是 'e' ,是不可能放在同一个地方的。