我是靠谱客的博主 土豪发带,最近开发中收集的这篇文章主要介绍结构体相关的计算(结构体指针加一以及强制类型转换后加一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

定义一个结构体,大小为16个字节

struct AAA
{
	long 1A1;
	char cA2;
	char cA3;
	long 1A4;
	long 1A5;
}*p;
int main()
{
	p = (struct AAA*)0x100000;
	printf("%pn", p + 0x1);
	printf("%pn", (unsigned char)p + 0x1);
	printf("%pn", (unsigned int)p + 0x1);
	printf("%pn", (unsigned long*)p + 0x1);
	printf("%pn", (unsigned char*)p + 0x1);
	printf("%pn", (char *)p + 0x1);
	printf("%pn", (char **)p + 0x1);


	system("pause:");
	return 0;
}
运行结果如下:


这下我们就得分析一下为什么结果会是这样。

1.p(0x100000)是一个指针,指向占16个字节的结构体,加一跳过整个结构体。(p+0x1=0x100010)

2.将p强制类型转化为无符号长整型,是一个数字,加1直接加1。  ((unsigned char)p + 0x1=0x1000001)

3.将p强制类型转化为无符号整型,是一个数字,加1直接加1。       ((unsigned int)p + 0x1=0x1000001)

4.p是一个指针,指向无符号长整型,占4个字节。                                (unsigned long*)p + 0x1=0x1000004)

5.p是一个指针,指向无符号字符,占1个字节。                                    (unsigned char*)p + 0x1=0x1000001)

6.p是一个指针,指向字符,占1个字节。                                              (char *)p + 0x1=0x1000001)

7.p是一个二级指针,里边存的是地址,占4个字节。                           ((char **)p + 0x1=0x1000004)

最后

以上就是土豪发带为你收集整理的结构体相关的计算(结构体指针加一以及强制类型转换后加一)的全部内容,希望文章能够帮你解决结构体相关的计算(结构体指针加一以及强制类型转换后加一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部