| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 826 人关注过本帖
标题:c语指针的问题
只看楼主 加入收藏
MHVLZ
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2011-3-22
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:11 
c语指针的问题
学了没多久,有个地方不太明白,希望各位指教
谭浩强的c程序设计上的第262页上写着:对指向函数的指针变量,像p+n、p++、p--等运算时无意义的。
如果我想用p++运算怎么办?比如指针p指向一个数组,在函数中使用了这个指针,这时我想用p++来调用数组的第二个元素怎么办?
搜索更多相关主题的帖子: 元素 
2011-03-27 15:05
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:4 
*******************对指向函数的指针变量,像p+n、p++、p--等运算时无意义的。
解释:首先函数是存放在进程的CS段(也就是代码只读区) 对于p+n  它的意思是p+n*sizeof(p所指向的数据类型)

但是函数是没有类型的  但是习惯上是把 返回值类型+参数的类型 叫做函数的类型  所以如果指向函数的指针+1  那么他应该加多少个字节?

呵呵 不管加多少字节  都是无意义的 因为函数不是数据 而是代码 你用指针取出来的东西是毫无意义的

*******************如指针p指向一个数组,在函数中使用了这个指针,这时我想用p++来调用数组的第二个元素怎么办?
如果p指向了数组 那么你p++就是加了一个数组所有元素的字节数  int a[10] 和 int (*p)[10] 你认为p和a 的数据类型一样吗?

肯定是不一样的  指针p指向一个数组   a指向的是整形元素   如果你要用p来访问第二那么这样  首先转化类型 printf("%d",*((int *)p + 1));

就可以啦  呵呵 写了这么多  希望你能彻底理解指针   祝你好运  加油 !!!


                                         
===========深入<----------------->浅出============
2011-03-27 15:27
huangapple
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:545
专家分:1790
注 册:2010-12-30
收藏
得分:4 
好像 ++p 是指向下一个元素,而不是下一个数组。。。
我实践是这样的,但有些书说如果p指向的是一个数组,那么++p的位移是整个数组的大小 值,而不是一个元素的大小值

但有些书上不知道为什么那么说,可能错了,也可能我理解错了

勤能补拙,熟能生巧!
2011-03-27 15:31
MHVLZ
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2011-3-22
收藏
得分:0 
回复 2楼 laoyang103
呵呵……还真是不懂的说…………………………=.=.......
假如,只有main函数,在这里面,有数组a[5]和指针p,如果*p=a[0](它和p=a是一个意思吧?),那么p++不就相当于*p=a[1]了吗?
如果有一个自定的函数,在主函数中,调用那个自定的函数,把指针p当做参数引入那个函数,在那个自定的函数中,用p++就不起作用了。
2011-03-27 15:41
MHVLZ
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2011-3-22
收藏
得分:0 
回复 3楼 huangapple
++p和p++的区别不就是自增和调用p的顺序不同吗?
2011-03-27 15:42
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
*p=a[0](它和p=a是一个意思吧)?  
肯定不是一个意思  一个是值传递  一个是址传递
前者是吧数组的第一个元素的值赋值给 p所指向的内存  但是p不一定指向数组第一个元素

后者只是让p指向了数组第一个元素  *p=a[0] ; p++那么p将指向一个未知区域

不用说当参数  就是只有一个主函数也是错的

                                         
===========深入<----------------->浅出============
2011-03-27 15:58
MHVLZ
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2011-3-22
收藏
得分:0 
回复 6楼 laoyang103
那如果是在p=a的情况下,在自己指定的函数中想使用p++怎么办?
2011-03-27 19:09
minand
Rank: 2
等 级:论坛游民
帖 子:71
专家分:89
注 册:2011-3-16
收藏
得分:4 
p=p++;
h=&p;
瞎说的
接分
2011-03-27 21:18
芳芳313
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2011-3-26
收藏
得分:4 
有点晕,
2011-03-27 21:38
绯苍幻想曲
Rank: 2
等 级:论坛游民
帖 子:34
专家分:49
注 册:2010-11-29
收藏
得分:4 
想用p++直接用就可以了,只有当指针指向的地址是一个函数的入口地址时p++等运算才没有意义
2011-03-27 21:46
快速回复:c语指针的问题
数据加载中...
 
   



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

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