从函数参数中获取数组的大小

时间:2014-08-15 03:23:04

标签: c arrays sizeof

我有以下内容:

typedef unsigned char BYTE;

size_t arrMod (BYTE ARR[3])
{
    ARR[1] = 255;
    return sizeof(ARR);
}

int main()
{
    BYTE arr[3];
    size_t s = arrMod(arr);

    fprintf(stdout,
    "Size = %i\nARR[0] = %i\nARR[1] = %i\nARR[2] = %i",
    s, arr[0], arr[1], arr[2]);

    return 1;
}

输出是:

Size = 12
ARR[0] = 0
ARR[1] = 255
ARR[2] = 0

我知道我不能给它sizeof(ARR)来获得希望的3个字节,因为数组会衰减成指针。我基本上收到指针大小。如何将arr的大小(3)作为函数的返回值?

1 个答案:

答案 0 :(得分:2)

唯一的方法是将函数的参数声明为指向数组的指针。例如

size_t arrMod (BYTE ( *ARR )[3] )
{
    ( *ARR )[1] = 255;
    return sizeof( *ARR );
}

但在这种情况下,您只能使用包含三个元素的数组。

无论如何,在C中获取具有任意数量元素的数组的大小是不可能的。

根据C标准

  

3除非它是sizeof运算符或一元&的操作数。   operator,或者是用于初始化数组的字符串文字,a   具有类型''数组类型''的表达式将转换为   带有''指向类型'的指针的表达式,指向初始值   数组对象的元素,而不是左值。如果是数组对象   具有寄存器存储类,行为未定义。