struct data2_t{
char *dt[1];
};
int main(void)
{
char data[8]="hello";
data2_t *d;
d=(data2_t *)&data;
printf("address of data is %lu\n",(unsigned long)&data);
printf("address of data is %lu\n",(unsigned long)d);
printf("address of data is %lu\n",(unsigned long)d->dt);
printf("address of data is %lu\n",(unsigned long)d->dt[0]);
printf("%s\n%s\n",(char *)&(d->dt[0]),(char *)d->dt);
}
结果为
内存存储为:
data[8]开辟内存中8byte,存储hello
d为data2_t型指针指向dt[0],dt[0]中存放一个指向char型数据的地址。
当令d=(data2_t )&data时,即d指向的dt[0]=data。此时d->dt(等价于data[0]的地址)即为hello,而dt[0]存放是hello,并不是data地址,(char )&dt[0]也可得到hello