【问题标题】: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,里面有一个数组。例如struct{int num[10]} array;

标签: c mplab


【解决方案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);

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 2021-08-05
    • 1970-01-01
    • 2013-04-12
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    相关资源
    最近更新 更多