C/C++ 结构体通过指针移位取值代码示例:int _tmain(int argc, _TCHAR* argv[])
{
#pragma pack(1)
typedef struct{
int a;
char x;
int y;
char z[6];
}AAA;
printf("%d
",sizeof(AAA));
AAA a = {1,"a",2,"bcdef"};
AAA* pa = &a;
int* test1 = (int *)(void *)pa;
char* test2 = (char *)(void *)(test1+1);
int* test3 = (int *)(void *)(test2+1);
char* test4 = (char *)(void *)(test3+1);
printf("%d ",*test1);
printf("%c ",*test2);
printf("%d ",*test3);
printf("%s", test4);
return 0;
#pragma pack()
}编译器:visual studio2010注意事项:
1、指针执行加减法,是将加减数值乘以该指针类型的大小作为移位的位数,因此需要强转为需要的类型
的指针类型作为运算数。
2、结构体内不能采用字符自动对齐,必须要用#pragma pack编译制导将对齐最小字符设为1才行,否则
偏移取值运算不能到达指定的位置《
C++ 设计新思维》 下载见 http://www.linuxidc.com/Linux/2014-07/104850.htm
C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码 http://www.linuxidc.com/Linux/2014-05/101227.htm读C++ Primer 之构造函数陷阱 http://www.linuxidc.com/Linux/2011-08/40176.htm读C++ Primer 之智能指针 http://www.linuxidc.com/Linux/2011-08/40177.htm读C++ Primer 之句柄类 http://www.linuxidc.com/Linux/2011-08/40175.htm
将C语言梳理一下,分布在以下10个章节中:- Linux-C成长之路(一):Linux下C编程概要 http://www.linuxidc.com/Linux/2014-05/101242.htm
- Linux-C成长之路(二):基本数据类型 http://www.linuxidc.com/Linux/2014-05/101242p2.htm
- Linux-C成长之路(三):基本IO函数操作 http://www.linuxidc.com/Linux/2014-05/101242p3.htm
- Linux-C成长之路(四):运算符 http://www.linuxidc.com/Linux/2014-05/101242p4.htm
- Linux-C成长之路(五):控制流 http://www.linuxidc.com/Linux/2014-05/101242p5.htm
- Linux-C成长之路(六):函数要义 http://www.linuxidc.com/Linux/2014-05/101242p6.htm
- Linux-C成长之路(七):数组与指针 http://www.linuxidc.com/Linux/2014-05/101242p7.htm
- Linux-C成长之路(八):存储类,动态内存 http://www.linuxidc.com/Linux/2014-05/101242p8.htm
- Linux-C成长之路(九):复合数据类型 http://www.linuxidc.com/Linux/2014-05/101242p9.htm
- Linux-C成长之路(十):其他高级议题
本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-10/107828.htm