gpt4 book ai didi

c - 用指针声明的数组的大小

转载 作者:行者123 更新时间:2023-11-30 17:33:31 33 4
gpt4 key购买 nike

char c[] = "Hello";
char *p = "Hello";

printf("%i", sizeof(c)); \\Prints 6
printf("%i", sizeof(p)); \\Prints 4

我的问题是:

为什么这些打印结果不同? c[] 不是也声明了一个指向数组第一个字符的指针(因此大小应该为 4,因为它是一个指针)?

最佳答案

听起来您对指针和数组感到困惑。指针和数组(在本例中为 char *char [])为 not the same thing.

  • 数组 char a[SIZE] 表示 a 位置的值是长度为 SIZE 的数组
  • 指针char *a;表示a位置处的值是指向char的指针。这可以与指针算术结合起来,表现得像一个数组(例如,a[10]a 指向的 10 个条目)

在内存中,它看起来像这样(示例取自 the FAQ ):

 char a[] = "hello";  // array

+---+---+---+---+---+---+
a: | h | e | l | l | o |\0 |
+---+---+---+---+---+---+

char *p = "world"; // pointer

+-----+ +---+---+---+---+---+---+
p: | *======> | w | o | r | l | d |\0 |
+-----+ +---+---+---+---+---+---+

很容易混淆指针和数组之间的区别,因为在许多情况下,数组引用“衰减”到指向其第一个元素的指针。这意味着在许多情况下(例如当传递给函数调用时)数组变成指针。如果您想了解更多,this section of the C FAQ describes the differences in detail .

一个主要的实际区别是编译器知道数组有多长。使用上面的例子:

char a[] = "hello";  
char *p = "world";

sizeof(a); // 6 - one byte for each character in the string,
// one for the '\0' terminator
sizeof(p); // whatever the size of the pointer is
// probably 4 or 8 on most machines (depending on whether it's a
// 32 or 64 bit machine)

关于c - 用指针声明的数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23727712/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com