谁能帮忙解释一二这个关于C指针和数组的问题?
#include <stdio.h>int main()
{
char *pa = "Hello";
char *pb = "Hello";
char array_a[] = "Hello";
char array_b[] = "Hello";
if (pa == pb)
printf("%d\n", 1);
if (array_a == array_b)
printf("%d\n", 2);
if (pa == array_a)
printf("%d\n", 3);
if (pa == "Hello")
printf("%d\n", 4);
if (array_a == "Hello")
printf("%d\n", 5);
return 0;
}
char *是指针,不需要开辟空间,"hello"在数据段上面
char[]需要开辟空间,也就是说在栈上面,函数退出了也就没有了,char[] a = "hello"有一个赋值的过程,栈上一份,代码段一份 回复 2# lxyscls
对pa和pb进行赋值的两个"Hello"其实是驻留在同一段地址里的同一个东西? date01 发表于 2017-03-16 10:36
回复 2# lxyscls
对pa和pb进行赋值的两个"Hello"其实是驻留在同一段地址里的同一个东西?
要不怎么是1, 4?
#include <stdio.h>
int main()
{
char *pa = "Hello";
char *pb = "Hello";
char array_a[] = "Hello";
char array_b[] = "Hello";
if (pa == pb) // 可能相等,也可能不等,标准未规定
printf("%d\n", 1);
if (array_a == array_b) // 肯定不定
printf("%d\n", 2);
if (pa == array_a) // 肯定不定
printf("%d\n", 3);
if (pa == "Hello") // 可能相等,也可能不等,标准未规定
printf("%d\n", 4);
if (array_a == "Hello") // 肯定不定
printf("%d\n", 5);
return 0;
}
回复 5# bruceteen
多谢!
页:
[1]