在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' ,是不可能放在同一个地方的。