数组和传递给函数[duplicate]的数组参数之间的C语言差异>> [

问题描述 投票:0回答:2
两个注释函数都返回完全相同的内存地址。所以为什么我不能从数组变量(指向第一个元素的指针)中获得正确的大小,而又不能从数组指针中获得大小(...
c arrays pointers memory-address
2个回答
0
投票
[主要是a是一个数组,它是在本地分配的,因此其大小将始终是元素数乘以sizeof(int)。但是,在调用函数时,将传递指向数组的指针(数组的第一个元素的地址)并将其存储在堆栈中。在函数内部打印时,实际上是在打印指针的大小,而不是数组的大小。在64位系统中,指针的大小为8个字节,在32位系统中,指针的大小为4个字节。

0
投票
因为您不能将数组作为函数的参数传递-数组在C中不是一流的类型,您不能对它们做很多事情。结果,如果您尝试声明一个函数以数组作为参数,则编译器会自动将其转换为指针。因此,在函数中,根本没有数组-您只有一个指针,而sizeof(arr)给出的是指针的大小,而不是转换为指针并传递给指针的数组的大小。功能。
© www.soinside.com 2019 - 2024. All rights reserved.