指针为空!=指针为0
struct Node{
char ch;
int num;
char str[5];
double dx;
int sum;
};
int main(){
int a=10;
Node x{'a',10,"yhp",12.23,20};
Node y{'b',100,"yhp",12.25,200};
int* s=nullptr;
int Node::*ip = nullptr;
ip = &Node::num;//0x0000 0004
ip = &Node::sum;//0x0000 0018
cout<<(x.*ip)<<endl;
cout<<(y.*ip)<<endl;
}
空有可能是0x0000 0000 也有可能是0xffff ffff
该指针存放的不是地址,存放的是该元素相对该结构体首元素地址的偏移值
是否可以用memcmp()函数比较两个结构体变量是否相等
不能,结构体有填充物,是随机值,memcpy是按照一个一个字节比较,也会比较占位符里面的值
柔性数组
该数组可以收缩,所以称其为柔性数组,data并不占用结构体的大小,它时一个标记,标记柔性数组的开始位置,编译完成后,这个data是一个常量
struct StrNode{
int ref;
int len;
int size;
char data[];
};
int main(){
StrNode*p=(StrNode*)malloc(sizeof(StrNode)+sizeof(char)*20);
StrNode*p=(StrNode*)malloc(sizeof(StrNode)+sizeof(char)*120);
该结构体的大小为12字节
位断结构
//该结构体大小为2
struct ANode{
char a;
char b;
};
//该结构体大小为1
struct BNode{
char a:4;
char b:3;
};
一个字节里面存储了32