在方法中传递数组并获取其大小

时间:2018-11-07 13:59:44

标签: c mplab

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

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_传递,因为它也是其他名称的通用方法。

2 个答案:

答案 0 :(得分:3)

Array将作为指针传递,而sizeof将不知道实际对象的大小。它将为您提供指针的大小。

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

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

答案 1 :(得分:3)

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

实际上您的函数声明:

void SaveValue(volatile unsigned char Array[])

完全等同于:

void SaveValue(volatile unsigned char *Array)

该函数接收的是指针,而不是实际的数组,因此sizeof的计算结果为指针的大小。

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