【发布时间】:2015-01-16 14:24:23
【问题描述】:
以下是比较数组本身大小和指向数组的指针大小的简单代码。
#include <stdio.h>
int main(){
int kkarray[100]= {1,0,};
int (*kkpointer) = kkarray;
printf("size of array using array itself : %ld \n" , sizeof(kkarray));
printf("size of array using pointer to array : %ld \n" , sizeof(kkpointer));
}
但结果是,
400
8
我可以理解第一个值是 400,但第二个值,我认为它也应该是 400,因为当我分配了一个指向数组的指针 kkpointer 时,它有点像数组的名称,即 const地址值。例如,我可以使用 kkpointer[0] 获取数组的第一个值。 我想知道为什么我得到“8”而不是 400。 我不认为“8”是地址本身的大小。 请告诉我。谢谢
【问题讨论】:
-
sizeof不是函数 - 它在编译时进行评估。它给你指针本身的大小 - 它不关心它指向什么。 -
@JonathonReinhart 幸运的是它并不关心指针,否则它将毫无用处。
-
@JonathonReinhart:您对第一部分的看法是正确的,它不是一个函数(无论如何它不可能是并且做它所做的事情)。但它是在编译时评估的。除非不是,这仅发生在 VLA(类型或变量)中。
-
@Deduplicator gahh 我知道。想一件事,然后输入另一件事!感谢您指出!