| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5762 人关注过本帖
标题:指针变量自加的问题
只看楼主 加入收藏
luruinet
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-11-19
收藏
 问题点数:0 回复次数:11 
指针变量自加的问题
int x,*p=&x;并且p=ff00;
那么++p的值是ff02,为什么不是ff01呢?是不是指针变量必须要指向某一个数呢?
搜索更多相关主题的帖子: 变量 指针 
2008-12-11 20:31
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
偏移该指针指向的数据类型的长度。

倚天照海花无数,流水高山心自知。
2008-12-11 20:33
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
和编译器有关,如果是书上的例题,应该指的是16位机,也就是TC 及 WIN-TC之类的编译器,一个指针占用两个字节,所以地址移动时以两个字节为基准单位。

    现在的编译器一般都是32位机的,也就是说,一个指针占用4个字节,也就是说,地址的移动以4个字节为单位。


PS:我指的是 int 型,如果是double 型,那就是8个字节了。

[[it] 本帖最后由 广陵绝唱 于 2008-12-11 20:38 编辑 [/it]]
2008-12-11 20:35
柳无痕
Rank: 1
来 自:浙江省
等 级:新手上路
帖 子:57
专家分:0
注 册:2008-12-10
收藏
得分:0 
往下一个元素而不是字节
2008-12-11 22:25
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 第4楼 柳无痕 的帖子
应该是在内存中往下挪动地址,输出的值为地址。
2008-12-11 22:28
柳无痕
Rank: 1
来 自:浙江省
等 级:新手上路
帖 子:57
专家分:0
注 册:2008-12-10
收藏
得分:0 
是的,是挪到下一个元素的地址
2008-12-11 22:50
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
收藏
得分:0 
这与运行的机子有关,int类型所占用的字节数可能为2、4;
而指针存放的是数据的地址,指针 p 是整型数的地址,故下一个数的
地址应是 p+1*(sizeof(int))

多少个日日夜夜想起你,只希望有缘再次相见
2008-12-12 00:23
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:0 
以下是引用广陵绝唱在2008-12-11 20:35的发言:

和编译器有关,如果是书上的例题,应该指的是16位机,也就是TC 及 WIN-TC之类的编译器,一个指针占用两个字节,所以地址移动时以两个字节为基准单位。

    现在的编译器一般都是32位机的,也就是说,一个指针占用 ...


看到概念性错误,就忍不住更正一下
这个说法是典型的知其然不知其所以然
指针怎么自加或者说指针怎样与整数进行加减运算那是取决于指针目标的类型的,和指针变量本身占用几个字节一点关系都没有

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-12-12 10:54
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 第8楼 forever74 的帖子
谢谢您。现在我来理解一下:指针是 int 型的,由于 int 型占用 2 个字节, 所以指针在自加之后,它的地址挪动 2 个单位。

    是这个意思吗?
2008-12-12 10:58
zhangcc86
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2007-4-5
收藏
得分:0 
指针变量本身占用4个字节的内存空间,楼主问的是指针偏移的问题。x的数据类型是int型,在TC中一个int型数据占用2个字节的内存空间。指针变量p中存放的是x在内存中的存放地址,即ff00。++p的作用是使指针指向下一个int型数据的地址,根据计算,应该是ff02。如果指针指向的是char型数据的存放地址,那么指针p一次偏移的量是一个字节。楼主应该画个图帮助理解。
|   x   |ff00 <-p  ff00和ff01都用来存放x,++p使指针指向下一个int型数据地址
|       |ff02

你想有所作为,而你又不比别人聪明,也不比别人勤奋,如果你能成功,猪都能上树!
2008-12-12 11:18
快速回复:指针变量自加的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016217 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved