原来真的不会用指针[*p++]
Describe:
有2字节字符数据,需要转换成2字节的短整型,字符数据低字节在前。
Analyse:
其实就是取一下数据,移位再或一下就好了,大伙都这样想的。
Ex1:
假设tmp1就是短整型,p指向数据为{0x01, 0x02}请看如下表达式:
tmp1 = ((*p++)&0xFF) | (((*p++)&0xFF)<<);
这条表达式从编译上来说,没有任何语法错误,然而得到的结果却不是我们想要的。
Ex2:
我们再看一个表达式:
tmp2 = (*p++)&0xFF;
tmp2 |= (((*p++)&0xFF)<<);
这样的表达式跟Ex1的表达式的差异,仅仅在于分成了两行,然而结果却对了。
Why:
问题出现在*p++处,它的作用是先取*p的值,然后再p++;但是Ex1在第2个*p++的时候,p是否已经++了呢?
从现象来看,第2个*p++处,p并未被++,所以出现了不是你想要的结果。
Test & Result:
#include <stdio.h> void main()
{
unsigned char s[] = {0x01, 0x02, 0x03, 0x04};
unsigned short tmp1, tmp2;
unsigned char* p = NULL;
int i; printf("unsigned char s[] = ");
for(i=;i<;i++)
printf("%02x ", s[i]);
printf("\n"); p = s;
tmp1 = ((*p++)&0xFF) | (((*p++)&0xFF)<<);
printf("tmp1=%04x, *p=%d.\n", tmp1, *p); p = s;
tmp2 = (*p++)&0xFF;
printf("tmp2=%04x, *p=%d.\n", tmp2, *p);
tmp2 = tmp2 | (((*p++)&0xFF)<<);
printf("tmp2=%04x, *p=%d.\n", tmp2, *p); }

OK , Do You Understand Now?
原来真的不会用指针[*p++]的更多相关文章
- int **指针问题
转自:http://blog.csdn.net/u012501459/article/details/45395571 在打印二维数组时遇到了问题,二维数组可以这样定义int matrix[ROWS] ...
- C++标准转换运算符
C++类型转换在实际编程中会经常使用,其实,本质上对象的类型用来解释(interpret)对象.因为,每个对象都占据一块内存空间,这块内存空间存放了一段二进制数据.通过标记该对象的类型,告诉如何看待这 ...
- const char * 的终结贴(看完无需其他任何文章,从此不再蛋疼)
我之前也是以为我对const char *ptr 这种形式的写法是掌握了的,真的,不就是说一个指针是不可改变的吗? 那么问题就来了,到底是ptr指针本身不能改变,还是ptr执行的值不能改变呢? 从网上 ...
- C++标准转换运算符dynamic_cast
dynamic_cast <new_type> (expression) dynamic_cast运算符,应该算是四个里面最特殊的一个,因为它涉及到编译器的属性设置,而且牵扯到的面向对象的 ...
- 揭秘DOM中data和nodeValue属性同步改变那些事
问题引发:最近在整理DOM系列的一些知识点,发现在DOM的某些接口API中,存在一些我想不通的现象.就随便举个例子吧:DOM文档模型中的文本节点,可以通过nodeValue或data属性访问文本节点的 ...
- Python内存分配器(如何产生一个对象的过程)
目录 内存分配器 Python分配器分层 第零层--通用的基础分配器 第一层--低级内存分配器 内存结构 arena pool new arena usable_arenas和unused_arena ...
- P1080 MOOC期终成绩
1080 MOOC期终成绩 (25分) 对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分 ...
- 013-结构体-C语言笔记
013-结构体-C语言笔记 学习目录 1.[掌握]返回指针的函数 2.[掌握]指向函数的指针 3.[掌握]结构体的声明 4.[掌握]结构体与数组 5.[掌握]结构体与指针 6.[掌握]结构体的嵌套 7 ...
- Mongoose Guide(转)
转自:http://www.w3c.com.cn/mongoose-guide Queries 文件可以通过一些静态辅助模型的方法检索. 任何涉及 指定 查询 条件的模型方法,有两种执行的方式: 当一 ...
随机推荐
- 多种下载文件方式 Response.BinaryWrite(byte[] DocContent);Response.WriteFile(System.IO.FileInfo DownloadFile .FullName);Response.Write(string html2Excel);
通过html给xls赋值,并下载xls文件 一.this.Response.Write(sw.ToString());System.IO.StringWriter sw = new System.IO ...
- iOS_SN_Socket网络编程(一)
1.Socket简介 首先让我们通过一张图知道socket在哪里? socket在哪里 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口. 2.TCP和UDP的区别 在这里就 ...
- Protobuf, understand the hood
proto文件定义 package lm; message Foo{ required int32 id = 1; } message Bar{ required int32 id = 1 [defa ...
- CSS常见BUG
CSS Hack IE条件注释: 所有IE:<!--[if IE]> css code <![endif]--> IE6以上:<!--[if gt IE 6]> c ...
- meta property=og标签含义及作用
不理解Meta Property=og标签是什么意思,以及对SEO的影响,看一下下面的介绍.Meta Property=og标签是什么呢?og是一种新的HTTP头部标记,即Open Graph Pro ...
- 字符串:格式化 - 零基础入门学习Python015
字符串:格式化 让编程改变世界 Change the world by program 字符串:格式化 上节课我们介绍了Python字符串的N多种奇葩方法的用法,但我们唯独漏了一个format()方法 ...
- ajax get/post
xmlhttp.open("POST", url, true); xmlhttp.setRequestHeader("Content-Type", " ...
- windows下将隐藏文件通过命令行改变为普通的显示文件
attrib -h -s *.* /s /d 不懂的看下 attrib /? 帮助.保存为bat也可以.
- Reverse Linked List II 解答
Question Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Giv ...
- hdu4453-Looploop(伸展树)
题目有很多图,不好粘贴..... 题意:给出N个数和K1,K2的值,最开始指针指向第一个数,有6种操作 add x : 给前K2个数都增加x reverse : 翻转前K1个数 insert x : ...