gpt4 book ai didi

c - 数组的 Sizeof...它是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 19:56:05 25 4
gpt4 key购买 nike

在这里观看:

int main(void){
int array[10];
printf("%d",sizeof(array));
}

在本例中,它显示 40,但是 sizeof 是如何工作的呢?
'array'只是一个地址,它如何仅通过地址确定大小?

---编辑---
我自己解释得很糟糕...我知道数组不是地址,而是单词 array该程序中使用的相当于一个地址

最佳答案

'array' is only an address

事实并非如此。你相信一些关于数组的错误观点。

数组不是地址。数组可以用在需要数组元素地址的上下文中。

我可以在需要柠檬皮的食谱中使用橙皮;这并不意味着橙子就是柠檬。

how does it determinate the size with only an address?

事实并非如此。

array 是一个由 10 个四字节整数组成的数组。编译器知道这一点。您的程序相当于 printf("%zu",10 * sizeof int);

(迂腐的注释:sizeof 给出了以 char 为单位的大小。恰好在绝大多数情况下,一个 char是一个字节。)

在 C99 中,可以合法地说:

int n = whatever();
int b[n + 10];
printf("%zu\n", sizeof b);

果然,这将打印出(n + 10) * sizeof int

它到底是如何做到这一点的?

把我气死了。查找 C99 编译器的源代码并查看它的功能。但首先想一想:如果您必须编写一个具有该属性的编译器,您会做什么?

最后,小测验:这个程序是做什么的?

int main(void){
int array[10];
int *pi = array;
printf("%zu\n", sizeof array);
printf("%zu\n", sizeof pi);
}

关于c - 数组的 Sizeof...它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42964207/

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