C指针和数组/’sizeof’运算符

可能重复: char指针和数组的堆栈指针差异

为了说明我的问题:

int main(void){ int myary[20]; int *myaryPtr; myaryPtr = myary; sizeof(myary); // Will it return 80? Correct? sizeof(myaryPtr); // Will it return 4? Correct? return 0; } 

首先,我的假设是正确的吗?

然后假设我的假设是正确的,详细解释是什么? 我明白我的20个元素数组是80个字节,但是myary这个名字不仅仅是指向数组第一个元素的指针吗? 所以不应该是4吗?

是的,假设一个int和一个指针在你的机器上都是4个字节长,你的假设是正确的。

不,数组不是指针。 数组名有时会在某些上下文中衰减为指针,但它们不是同一个东西。 comp.lang.c常见问题的一部分专门针对这个常见的混淆点。

无论是将数组声明为int myArr[20]还是int* myArrPtr ,数组的大小都不会存储在内存中。

会发生什么是sizeof()被(通过编译器)替换为常量值

因此,因为myArr在编译之前被指定为固定大小,所以编译器知道分配的内存量有多大。 使用myArrPtr ,您可以动态分配不同的数组大小,因此只存储类型的大小。