当前位置: 技术问答>linux和unix
这是C++中的一段程序,请大家帮忙看看,有两个地方看不懂?
来源: 互联网 发布时间:2017-04-23
本文导语: st_obj *ptr; //ptr->n,比1大 for(int i = 0; i n; i++){ ptr->data_[i].camp_id....);//data_[0],怎么能这么使用呢?数据越界了啊 } struct st_obj { char id[60]; int n; struct { U64 ll_id; int counst; } data_[0]; inline U32 Size() {return s...
st_obj *ptr;
//ptr->n,比1大
for(int i = 0; i n; i++){
ptr->data_[i].camp_id....);//data_[0],怎么能这么使用呢?数据越界了啊
}
struct st_obj {
char id[60];
int n;
struct {
U64 ll_id;
int counst;
} data_[0];
inline U32 Size() {return sizeof(*this)+n*sizeof(data_[0]);}//这个函数有什么用吗?这么写有什么意义?
};
//ptr->n,比1大
for(int i = 0; i n; i++){
ptr->data_[i].camp_id....);//data_[0],怎么能这么使用呢?数据越界了啊
}
struct st_obj {
char id[60];
int n;
struct {
U64 ll_id;
int counst;
} data_[0];
inline U32 Size() {return sizeof(*this)+n*sizeof(data_[0]);}//这个函数有什么用吗?这么写有什么意义?
};
|
柔性数组,只是为了索引,实际内存分配是不止那么大的。
|
1、越界了是越界了,指是越界访问,数据还是没变越界的,这种情况一般用在st_obj *ptr;指向的地方的长度一开始未知。通信中广泛使用
2、U32 Size就是返回真是长度啊。n表示后面加了多少个data_的结构体。
2、U32 Size就是返回真是长度啊。n表示后面加了多少个data_的结构体。
|
st_obj.size() 的时候调用它啊。size是成员函数。
|
这就好像类的成员函数,方便调用,可以直接显示结构体大小。