指针地址是一次跳两个字节地址还是一个字节地址

[复制链接]
109|21
 楼主 | 2018-11-8 16:13 | 显示全部楼层 |阅读模式
请教个问题
如果我的变量是
unsigned int k

指针是:
unsigned int *pread
pread=(unsigned char  *)k;

pread++;//请问这个指针地址是一次跳两个字节地址还是一个字节地址
| 2018-11-8 16:17 | 显示全部楼层
为什么这么用?unsigned int *pread不是无符号整形吗?
 楼主 | 2018-11-8 16:21 | 显示全部楼层
只是举例。我想知道是跳几个字节
| 2018-11-8 16:25 | 显示全部楼层

两个字节地址,pread的属性未变,还是unsigned int型指针。
| 2018-11-8 16:32 | 显示全部楼层

针加减的大小和数据类型有关,编译器是可以识别的;
你的 u char 类型,指针操作时是1,int等类型是2或4,看芯片和编译器,等
| 2018-11-8 16:35 | 显示全部楼层

看错了,两个
| 2018-11-8 16:38 | 显示全部楼层


注意大小端,否则可能不是你想要的结果
 楼主 | 2018-11-8 16:44 | 显示全部楼层

再请教一下

变量int  k
指针int  *pl

pl=k; 和 pl=&k, 有什么不同
 楼主 | 2018-11-8 16:48 | 显示全部楼层


什么是大小端
| 2018-11-8 16:55 | 显示全部楼层

强制指针转换类型不对
定义的时候指向uint型,强制转换指向uchar
| 2018-11-8 16:59 | 显示全部楼层
那这样呢:
如果
变量unsigned char code   k
指针unsigned char code *pl;

pl = (unsigned char code *) k


pl什么结果
 楼主 | 2018-11-8 17:02 | 显示全部楼层
继续请教 指针 *pi   我想知道他指向的地址是否超过0x2000  如何操作
| 2018-11-8 17:06 | 显示全部楼层
两个字节没错的,铁板锭钉的事
| 2018-11-8 17:09 | 显示全部楼层
额。。。,这个编译会出错的吧!
| 2018-11-8 17:16 | 显示全部楼层
pread的数据类型又没有改变了,只不过得到了一个起始地址而已。当然是二个字节。
| 2018-11-8 17:20 | 显示全部楼层

给一个出错信息。
 楼主 | 2018-11-8 17:24 | 显示全部楼层
已经有答案了,会跳两个字节地址,要想知道是否指针指向的地址是否超过某个值,比如0x20   int *p;
int i = 0;
p = &i;
if(p > 0x20)
{
    printf("");
}
| 2018-11-8 17:31 | 显示全部楼层


例子不能乱举的,你举的例子虽然不是完全不能工作,但是肯定是不常见的,逻辑上比较混乱的。
这对你学习,帮助甚微。
| 2018-11-8 17:34 | 显示全部楼层

"
unsigned int *pread
pread=(unsigned char  *)k;
"

unsigned int *pread表示指向unsigned int类型,增加1当然是加2,因为unsigned int占用两个字节,pread变量自身保存在默认空间,取决于编译模式

pread=(unsigned char  *)k;表示将K的值强制成(unsigned char  *)类型指针,并将值赋值给pread,显然两边的类型不同,会有警告或错误报告
| 2018-11-8 17:40 | 显示全部楼层
如果在RAM中,10.11地址中存放双字节数据HL,有两种方式:
H->11
L->10

H->10
L->11
如你的情况
int dat; ->RAM 10:11
int *p;
dat = 0x1234;
p = (u8*)&dat;
则p = 10(起始地址)
*p的值为0x12或0x34,不确定
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表