免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2688 | 回复: 12
打印 上一主题 下一主题

[C] 请教一个C语言的问题~~~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-23 11:34 |只看该作者 |倒序浏览
能不能帮我看看这段code的运行结果为什么会是这样的:

=============================================
#include <stdlib.h>
#include <stdio.h>

typedef unsigned char U8;

typedef struct
{
  U8 value1;
  U8 value2;
  U8 value3;
  U8 value4;
}header;

typedef struct
{
  int ab;
  char cd;
  unsigned char ef;
  unsigned char *num;
  char gg;
  char ff;
  int cc;
}Ind;

static void Handle( const Ind      *dataInd )
{
   header   Header;

   const U8 *pos = dataInd->num;
   printf("num1:%x   pos:%x\n",*(dataInd->num), *pos);
   
   Header.value1 = *pos++;
   printf("value1 %x   pos %x\n",Header.value1, *pos);
   
   Header.value2 = *pos++;
   printf("value2 %x   pos %x\n", Header.value2 , *pos);
   
   Header.value3 =  *pos++;
   printf("value3 %x   pos %x\n",Header.value3, *pos);
   
   Header.value4 = *pos++;
   printf("value4 %x   pos %x\n",Header.value4, *pos);
   
   printf("num2   %x\n",*(dataInd->num));
}

int main(void)
{
   Ind a;
   U8 *vl;
   vl = a.num;
   *vl=0x01;
   Handle(&a);  
   return 1;
}
==========================================================

bash$./a.out
num1:1   pos:1
value1 1   pos f6
value2 f6   pos ff
value3 ff   pos bf
value4 bf   pos 33
num2   1

===========================================

pos 后面的值"f6, ff, bf, 33"是怎么得来的?
num的值为什么没变呢?

论坛徽章:
0
2 [报告]
发表于 2008-10-23 12:52 |只看该作者
*pos++  
lz最好看一下*和++的优先级

论坛徽章:
0
3 [报告]
发表于 2008-10-23 13:10 |只看该作者

回复 #2 5毛党党员 的帖子

++要高,先把pos的值取出来,做赋值操作,然后pos指针加1,问题是,pos指针加1之后它指向哪里呢?为什么会得到"f6, ff, bf, 33"?它们是随机数吗?

论坛徽章:
0
4 [报告]
发表于 2008-10-23 14:57 |只看该作者
请高手指导~~~

论坛徽章:
0
5 [报告]
发表于 2008-10-23 15:23 |只看该作者
原帖由 woodandwood 于 2008-10-23 13:10 发表
++要高,先把pos的值取出来,做赋值操作,然后pos指针加1,问题是,pos指针加1之后它指向哪里呢?为什么会得到"f6, ff, bf, 33"?它们是随机数吗?

指向的 pos指针 向后移动U8长度 所指向的位置
得到的值是随机的

论坛徽章:
0
6 [报告]
发表于 2008-10-23 15:45 |只看该作者
问题是为什么前后2个值不一样?难道是在赋值之后,print之前,值就变了?

论坛徽章:
0
7 [报告]
发表于 2008-10-23 15:55 |只看该作者
原帖由 wliang511 于 2008-10-23 15:45 发表
问题是为什么前后2个值不一样?难道是在赋值之后,print之前,值就变了?

你还是要去看看++的介绍

*pos++ 是先返回 *pos 然后pos++

所以你的 value 的值 和 上一个pos是一样的

论坛徽章:
0
8 [报告]
发表于 2008-10-23 15:59 |只看该作者
原帖由 5毛党党员 于 2008-10-23 15:55 发表

你还是要去看看++的介绍

*pos++ 是先返回 *pos 然后pos++

所以你的 value 的值 和 上一个pos是一样的


哦,,,忘了一个++在前,++在后的问题,呵呵,只注意到右结合了。

论坛徽章:
0
9 [报告]
发表于 2008-10-23 16:01 |只看该作者

回复 #5 5毛党党员 的帖子

既然是随机的,为什么每次run的时候都是这几个值呢?

论坛徽章:
0
10 [报告]
发表于 2008-10-23 16:04 |只看该作者
有是这中*与++的无聊贴。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP