新人问个定义数组变量时长度是否用填写的问题
大家好,我是个C++新人……问题如果太幼稚希望大家原谅
编译环境是VS2012,这样写编译通过
class RequestItem
{
public:
BYTE Source;
BYTE Buffer;
BYTE Target[];
};
这样写,编译不通过,
class RequestItem
{
public:
BYTE Source;
BYTE Buffer[];
BYTE Target[];
};
这样写,编译通过
class RequestItem
{
public:
BYTE Source;
BYTE Buffer[1];
BYTE Target[];
};
请问为什么呢?
[解决办法]
using namespace std;
class Test
{
public:
public:
char a;
char b[];
char c[]; //编译通过
};
int main(void)
{
Test A;
printf("%p\n", &A.a);
printf("%p\n", &A.b);
printf("%p\n", &A.c);
}
看地址,
hh@PC:~/0$ ./a.out
0xbfd2a23f
0xbfd2a240
0xbfd2a240
[解决办法]
编译通过没通过,是编译器的问题。
柔性数组不占用空间,定义在最后就等于this+sizeof(*this)。
[解决办法]
结构中只有最后一个成员允许变长吧。
[解决办法]
数组定义时一般都需要填写长度,如果长度当时无法确定的话可以定义成指针,在运行时指向动态开辟的数组首地址