如果我们在将数组传递给函数后尝试确定数组的大小,实际会发生什么

德比迪塔·哈尔德(Debdipta Halder)
#include<stdio.h>
void length(int arr[])
{
 int len=sizeof(arr)/sizeof(arr[0]);
 printf("%d",len);
} 

main()
{
 int arr[]={4,5,6,3,21,9,3,8};
 length(arr);
}

在此代码中,答案始终为2。我无法理解为什么。是否必须始终发送大小。

你不担心孩子

在C语言中,您不能将整个数组传递给被调用的函数,因为在那种情况下,它可能会占用巨大的堆栈空间,因为据我所知,传递给函数的参数存储在堆栈中。

因此,当您尝试将数组传递给函数时,由于数组存储在连续的内存位置中,因此数组名称会衰减为指向数组第一个元素的指针,因此您只需要知道第一个元素的地址即可。

正如@John Zwinck所指出的那样,始终获得输出的确切原因2可能是因为您在64-bit系统上。

在64位系统/编译器上,指针的大小为8 bytes(仅是因为系统可以访问2^64地址,因此需要8个字节来存储它们),并且大小为intis 4 bytes

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我们将参数传递给System.out.println()时会发生什么?

来自分类Dev

当我们尝试访问数组元素时会发生什么?

来自分类Dev

如果我们将数组传递给C语言中的函数,是否总是通过引用传递它?

来自分类Dev

如果我们减小hiberfil.sys的大小会发生什么?

来自分类Dev

将数组传递给函数后如何知道数组的大小

来自分类Dev

将数组传递给函数后如何知道数组的大小

来自分类Dev

如果我将函数主体而不是函数名称传递给setTimeout,会发生什么情况?

来自分类Dev

如果我们不显式传递数组的大小,则在哪里初始化数组?

来自分类Dev

我们如何不用引用就可以通过引用将数组传递给函数

来自分类Dev

如果将很少的参数传递给Shell函数,会发生什么情况?

来自分类Dev

如果将太多的require()传递给变量,会发生什么?

来自分类Dev

将数组传递给Perl length子例程时会发生什么?

来自分类Dev

将非关联数组传递给json_encode()时会发生什么?

来自分类Dev

我们可以使用for-each循环遍历传递给函数的数组吗?

来自分类Dev

将数组传递给函数的大小控制

来自分类Dev

确定数组实际使用的大小

来自分类Dev

如果我们传递Python函数名,究竟将什么作为参数传递?

来自分类Dev

如果我们将彼得森算法中的命令重新排序以进行互斥会发生什么?

来自分类Dev

如果我们将色调移动 2*pi/3,R、G、B 直方图会发生什么变化?

来自分类Dev

如果我们将异步重置块与同步重置一起使用会发生什么?

来自分类Dev

为什么将数组的大小作为参数传递给函数时,数组的大小为何不同

来自分类Dev

我们可以将什么参数传递给super()?

来自分类Dev

#import是什么意思?如果我们使用#include会发生什么?

来自分类Dev

当我们尝试设置当前执行代码的寄存器时会发生什么?

来自分类Dev

当我们尝试修改字符串常量时会发生什么?

来自分类Dev

当我们将int参数传递给重载方法时,会发生什么情况,该重载方法将float作为一个方法的参数,将另一个作为double参数

来自分类Dev

为什么我们将String数组作为参数传递给main()方法,为什么没有任何集合类型或包装器类型或原始类型呢?

来自分类Dev

如果我们按顺序声明[Flags]枚举会发生什么?

来自分类Dev

如果我们不检查init方法中的“ if(self)”,会发生什么?

Related 相关文章

  1. 1

    当我们将参数传递给System.out.println()时会发生什么?

  2. 2

    当我们尝试访问数组元素时会发生什么?

  3. 3

    如果我们将数组传递给C语言中的函数,是否总是通过引用传递它?

  4. 4

    如果我们减小hiberfil.sys的大小会发生什么?

  5. 5

    将数组传递给函数后如何知道数组的大小

  6. 6

    将数组传递给函数后如何知道数组的大小

  7. 7

    如果我将函数主体而不是函数名称传递给setTimeout,会发生什么情况?

  8. 8

    如果我们不显式传递数组的大小,则在哪里初始化数组?

  9. 9

    我们如何不用引用就可以通过引用将数组传递给函数

  10. 10

    如果将很少的参数传递给Shell函数,会发生什么情况?

  11. 11

    如果将太多的require()传递给变量,会发生什么?

  12. 12

    将数组传递给Perl length子例程时会发生什么?

  13. 13

    将非关联数组传递给json_encode()时会发生什么?

  14. 14

    我们可以使用for-each循环遍历传递给函数的数组吗?

  15. 15

    将数组传递给函数的大小控制

  16. 16

    确定数组实际使用的大小

  17. 17

    如果我们传递Python函数名,究竟将什么作为参数传递?

  18. 18

    如果我们将彼得森算法中的命令重新排序以进行互斥会发生什么?

  19. 19

    如果我们将色调移动 2*pi/3,R、G、B 直方图会发生什么变化?

  20. 20

    如果我们将异步重置块与同步重置一起使用会发生什么?

  21. 21

    为什么将数组的大小作为参数传递给函数时,数组的大小为何不同

  22. 22

    我们可以将什么参数传递给super()?

  23. 23

    #import是什么意思?如果我们使用#include会发生什么?

  24. 24

    当我们尝试设置当前执行代码的寄存器时会发生什么?

  25. 25

    当我们尝试修改字符串常量时会发生什么?

  26. 26

    当我们将int参数传递给重载方法时,会发生什么情况,该重载方法将float作为一个方法的参数,将另一个作为double参数

  27. 27

    为什么我们将String数组作为参数传递给main()方法,为什么没有任何集合类型或包装器类型或原始类型呢?

  28. 28

    如果我们按顺序声明[Flags]枚举会发生什么?

  29. 29

    如果我们不检查init方法中的“ if(self)”,会发生什么?

热门标签

归档