date01 发表于 2017-03-16 10:21

谁能帮忙解释一二这个关于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;
}

lxyscls 发表于 2017-03-16 10:32

char *是指针,不需要开辟空间,"hello"在数据段上面
char[]需要开辟空间,也就是说在栈上面,函数退出了也就没有了,char[] a = "hello"有一个赋值的过程,栈上一份,代码段一份

date01 发表于 2017-03-16 10:36

回复 2# lxyscls

对pa和pb进行赋值的两个"Hello"其实是驻留在同一段地址里的同一个东西?

lxyscls 发表于 2017-03-16 13:12

date01 发表于 2017-03-16 10:36
回复 2# lxyscls

对pa和pb进行赋值的两个"Hello"其实是驻留在同一段地址里的同一个东西?

要不怎么是1, 4?

bruceteen 发表于 2017-03-17 08:26

#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;
}

date01 发表于 2017-03-17 13:39

回复 5# bruceteen

多谢!
页: [1]
查看完整版本: 谁能帮忙解释一二这个关于C指针和数组的问题?