在方法中传递数组并获取它的大小[重复]

Posted

技术标签:

【中文标题】在方法中传递数组并获取它的大小[重复]【英文标题】:Pass array in method and get it's size [duplicate] 【发布时间】:2019-04-10 23:18:34 【问题描述】:

我需要在例程中传递一个数组,然后读取它的大小。

typedef struct
  
   unsigned char Name[20];
Sensors_;
extern volatile Sensors_ Sensor;

然后在源文件中

我正在使用这种方法

void Save()

   SaveValue(Sensor.Name)
 

void SaveValue(volatile unsigned char Array[])

printf("%d",sizeof(Array));

我的数组的实际大小是 20 个字符,但我得到了输出编号 2。 为什么会这样?我在我的方法中传递我的数组,所以大小与我的第一个数组不同吗?

我也不想将它作为 Sensors_ 传递,因为它也是其他名称的通用方法。

【问题讨论】:

你可以传递一个struct,里面有一个数组。例如structint num[10] array; 【参考方案1】:

在大多数情况下,数组在表达式中使用时会衰减为指向其第一个元素的指针。特别是,当数组是函数的参数时,实际传递的是指向第一个元素的指针。

其实你的函数声明:

void SaveValue(volatile unsigned char Array[])

完全等价于:

void SaveValue(volatile unsigned char *Array)

所以函数接收的是一个指针,而不是一个实际的数组,所以sizeof 计算为指针的大小。

将数组传递给函数时,需要将长度作为单独的参数显式传递。

【讨论】:

谢谢先生。我只是想知道我是否可以避免传递第二个参数。【参考方案2】:

Array 将作为指针传递,sizeof 将不知道实际对象的大小。它会给你指针的大小。

要使您的方法(在 C 中称为函数)具有通用性,您必须传递数组的大小:

void SaveValue(volatile unsigned char Array[], size_t size);

【讨论】:

以上是关于在方法中传递数组并获取它的大小[重复]的主要内容,如果未能解决你的问题,请参考以下文章

传递数组的C大小[重复]

在重复函数中检索 ArrayList 的值

传递动态大小的数组(不允许使用参数)[重复]

Java空点异常错误[重复]

获取json文件信息并使用它的最佳方法[重复]

获取二维数组的大小[重复]