由协议栈源码想到的c和指针书籍
来源:互联网 发布:千牛mac官方版 编辑:程序博客网 时间:2024/05/22 17:12
unsigned char *ptr; struct tcphdr *th = tcp_hdr(skb); int length = (th->doff * 4) - sizeof(struct tcphdr); ptr = (unsigned char *)(th + 1);
最近看源代码的时候,发现了一个很经典的用法,
估计在C中经常使用,
就是:ptr = (unsigned char *)(th+1);
于是,做了一个实验,用数组测试,如下:
#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){ int a[] = {1,2,3,4,5}; int *t = a; printf("sizeof a=%d\n",sizeof(a)); printf("a =%d\n",a); printf("a+1 =%d\n",a+1); printf("a+2 =%d\n",a+2); printf("&a=%d\n",&a); printf("&a+1=%d\n",&a+1); printf("*a=%d\n",*a); printf("*(a+1)=%d\n",*(a+1)); printf("*(&a-1)=%d\n",*(&a-1)); printf("*(&a+1)=%d\n",*(&a+1)); printf("sizeof t=%d\n",sizeof(t)); printf("t = %d\n",t); printf("t+1 = %d\n",t+1); printf("t+2 = %d\n",t+2); printf("&t=%d\n",&t); printf("&t+1=%d\n",&t+1); printf("&t-1=%d\n",&t-1); printf("*(&t-1)=%d\n",*(&t-1)); printf("*(&t+1)=%d\n",*(&t+1)); printf("&t+2=%d\n",&t+2); printf("t=%d\n",*t); printf("t+1=%d\n",*(t+1)); printf("a[0]= %d\n",&a[0]); printf("a[1]= %d\n",&a[1]); printf("a[2]= %d\n",&a[2]); printf("a[3]= %d\n",&a[3]); printf("a[4]= %d\n",&a[4]); printf("a[5]= %d\n",&a[5]); printf("a[6]= %d\n",&a[6]);}
发现打印的结果如下,
sizeof a=20a =139503088a+1 =139503092a+2 =139503096&a=139503088&a+1=139503108*a=1*(a+1)=2*(&a-1)=139503068*(&a+1)=139503108sizeof t=8t = 139503088t+1 = 139503092t+2 = 139503096&t=139503152&t+1=139503160&t-1=139503144*(&t-1)=4195344*(&t+1)=0&t+2=139503168t=1t+1=2a[0]= 139503088a[1]= 139503092a[2]= 139503096a[3]= 139503100a[4]= 139503104a[5]= 139503108a[6]= 139503112
嗯,这样就比较清楚的了解指针和数组的关系了!
阅读全文
0 0
- 由协议栈源码想到的c和指针书籍
- 由C语言指针想到的
- 由C语言想到的
- 由chrome源码中的arraysize想到的
- 由chrome源码中的arraysize想到的
- 由inline想到的【C++/C】
- 由C/C++ 争议想到的
- 由C数组array[-1]想到的
- 由VCL和MFC想到的 …
- 由SendMessageTimeout想到的。SendMessageTimeout 和 SendMessage
- 由SendMessageTimeout想到的。SendMessageTimeout 和 SendMessage
- 由sizeof和strlen想到的
- 由Tencent://Message协议想到的一个解决方案
- 由Tencent://Message协议想到的一个解决方案
- 由Tencent://Message协议想到的一个解决方案
- 【C++】由指针常量和常量指针引发的问题
- 由《C缺陷和陷阱》上的一个例子想到的
- 由本子想到的
- 《Spring AOP学习总结之三—AOP对于事务的配置》
- js入门篇(第一篇)
- smartforms 将编辑器设为word
- Linux vim学习
- Discuz插件提示:对不起,您安装的不是正版应用的解决办法
- 由协议栈源码想到的c和指针书籍
- Python函数之可变类型与不可变类型
- Linux功耗管理(15)_Linux common clock framework(2)_clock provider
- 传奇女强人刘晓庆打破传统,进军微电商再掀商业风暴!
- ORA-12560: TNS: 协议适配器错误
- 欢迎使用CSDN-markdown编辑器
- matlab坐标轴axes显示问题
- 前端面试问题总结
- CentOS6最小化安装Oracle Client并配置sqlplus和sqlldr工具