首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新人问个定义数组变量时长度是否用填写的有关问题

2013-08-27 
新人问个定义数组变量时长度是否用填写的问题大家好,我是个C++新人……问题如果太幼稚希望大家原谅编译环境

新人问个定义数组变量时长度是否用填写的问题
大家好,我是个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)。
[解决办法]
结构中只有最后一个成员允许变长吧。
[解决办法]
数组定义时一般都需要填写长度,如果长度当时无法确定的话可以定义成指针,在运行时指向动态开辟的数组首地址

热点排行