由协议栈源码想到的c和指针书籍

        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=20
a =139503088
a+1 =139503092
a+2 =139503096
&a=139503088
&a+1=139503108
*a=1
*(a+1)=2
*(&a-1)=139503068
*(&a+1)=139503108
sizeof t=8
t = 139503088
t+1 = 139503092
t+2 = 139503096
&t=139503152
&t+1=139503160
&t-1=139503144
*(&t-1)=4195344
*(&t+1)=0
&t+2=139503168
t=1
t+1=2
a[0]= 139503088
a[1]= 139503092
a[2]= 139503096
a[3]= 139503100
a[4]= 139503104
a[5]= 139503108
a[6]= 139503112

嗯,这样就比较清楚的了解指针和数组的关系了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值