gpt4 book ai didi

c - 数组和指针的大小

转载 作者:行者123 更新时间:2023-12-02 22:21:27 26 4
gpt4 key购买 nike

这是我的示例代码

#include<stdio.h>
void main()
{
int arr[]={1,2,3,4,5,6};
char *ptr,a;
a='c';
ptr=&a;
int *ptr1,a1;
a1=4;
ptr1=&a1;
printf("%d %d %d",sizeof(arr), sizeof(ptr1), sizeof(ptr));
}

现在,据我所知,size of 会告诉我存储变量所需的大小,现在这个输出是

24 4 4

为什么 arr=24 的大小,毕竟它只是一个指针,它应该有大小 =4?

谢谢。

最佳答案

“……毕竟它只是一个指针……”?不,数组不是指针。 Array 是一个数组对象:一个固定的连续内存块,用于存储数组元素,不涉及任何类型的指针。在您的情况下,数组有 6 个元素,每个元素的大小为 4。这就是为什么您的 sizeof 计算结果为 24。

关于数组是指针的常见误解已被揭穿数百万次,但不知何故,它时不时地继续出现。阅读常见问题解答,如果您对此有任何疑问,请回来

http://c-faq.com/aryptr/index.html

附言正如@Joachim Pileborg 在他的回答中正确指出的那样, sizeof 不是一个函数。它是一个运算符。


数组与指针行为不同的另一个上下文是一元 & 运算符(“地址”运算符)。当一元 & 应用于 int * 类型的指针时,会生成 int ** 类型的指针。当一元 & 应用于 int [10] 类型的数组时,会生成 int (*)[10] 类型的指针。这是两种截然不同的类型。

int *p = 0;
int a[10] = { 0 };

int **p1 = &p; /* OK */
int **p2 = &a; /* ERROR */
int (*p3)[10] = &a; /* OK */

这是另一个常见的问题(和错误)来源:有时人们期望 & 在应用于 int [10] 时产生 int ** 指针] 数组。

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

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