指针练习题2

判断打印结果:

#include <stdio.h>

struct Test
{
	int		Num;
	char*	pcName;
	short	sData;
	char	cha[2];
	short	sBa[4];
}*p;

int main(int argc, char* argv[])
{
	p = 0x100000;

	printf("%p\n", p + 0x1);
	printf("%p\n", (unsigned long)p + 0x1);
	printf("%p\n", (unsigned int*)p + 0x1);

	return 0;
}

分析:

1.最开始p声明为结构体Test的指针。

2.main函数中为指针p赋值,值为0x100000。

3.第一个printf中,“p + 0x1”即为偏移1个Test结构体的长度。经计算,Test结构体的长度为20个字节。所以结果为0x100014。

4.第二个printf中,由于p被强制类型转换为了unsigned long型,所以已经不能按照指针来计算。结果为0x100001。

5.第三个printf中,p强制类型转换为了unsigned int型的指针,即4个字节。结果为0x100004。

结果: