在方法中传递数组并获取它的大小[重复]
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);
【讨论】:
以上是关于在方法中传递数组并获取它的大小[重复]的主要内容,如果未能解决你的问题,请参考以下文章