我有以下内容:
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)作为函数的返回值?
答案 0 :(得分:2)
唯一的方法是将函数的参数声明为指向数组的指针。例如
size_t arrMod (BYTE ( *ARR )[3] )
{
( *ARR )[1] = 255;
return sizeof( *ARR );
}
但在这种情况下,您只能使用包含三个元素的数组。
无论如何,在C中获取具有任意数量元素的数组的大小是不可能的。
根据C标准
3除非它是sizeof运算符或一元&的操作数。 operator,或者是用于初始化数组的字符串文字,a 具有类型''数组类型''的表达式将转换为 带有''指向类型'的指针的表达式,指向初始值 数组对象的元素,而不是左值。如果是数组对象 具有寄存器存储类,行为未定义。