| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 888 人关注过本帖
标题:C指针的传递问题
只看楼主 加入收藏
qingke
Rank: 1
等 级:新手上路
帖 子:11
专家分:3
注 册:2011-2-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:15 
C指针的传递问题
p0=p;
*p=*(p+1);
*(p+1)=*p0;
当我这样子做的时候,结果应该P最终的指向的地址不变,但是该地址内容是原来p+1的内容,而p+1的指针内容是原来p的。
但是我运行的结果确实p跟p+1指针内容都是p+1的内容。
而当我用的是
p0=p;
p=(p+1);
(p+1)=p0;
后面的这种写法就出现错误 error C2106: “=”: 左操作数必须为左值
在(p+1)=p0那行的样子

[ 本帖最后由 qingke 于 2011-2-24 20:35 编辑 ]
搜索更多相关主题的帖子: 确实 
2011-02-24 16:04
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:10 
请楼主注意:
a[i] <=> *(a+i)
那么,
*p = *(p+1); <=> p[0] = p[1];
*(p+1) = *p0; <=> p[1] = p[0]; //因为p0和p指向同一空间
这么看,楼主先把p[1]的值赋值(覆盖)p[0],这时,p[0]和p[1]的内容应该是一样的了。
想想简单的交换语句:
c = a;
a = b;
b = c;

而后面的写法将更改p的指向了。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-24 16:28
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
收藏
得分:0 
回复 2楼 犬虫门心
不对吧,应该是a[i]<=>(a+i)

免费赠送河蟹一只
2011-02-24 16:33
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
以下是引用pcbaichi在2011-2-24 16:33:08的发言:

不对吧,应该是a<=>(a+i)
按照您的说法,那么,如果要让指针a向后移动i个元素,就可以什么都不写,而不是写成a = a+i了?
请上机验证下面简单例子的输出结果:
int p[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *a = p;

printf("%d %d\n", *(a+3), a[3]);

您如果感兴趣,还可以加上下面一个输出语句,注意在编译时有没有警告或者错误的信息:
printf("%d\n", 3[a]);

原因:
a[i] <=> *(a+i) <=> *(i+a) <=> i[a]
这就是[]运算符的本质。

[ 本帖最后由 犬虫门心 于 2011-2-24 16:42 编辑 ]
收到的鲜花
  • pcbaichi2011-02-24 17:10 送鲜花  1朵   附言:我很赞同

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-24 16:40
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
收藏
得分:0 
回复 4楼 犬虫门心
#include<stdio.h>
int main(void)
{
    int i,a[10];
    for(i=0;i<10;i++)
    {
        scanf("%d",a+i);
        printf("%d",a[i]);
    }
    return 0;
}
那你用vc 运行一下,我想请教你一下,这是怎么回事,按你说的,我觉得指针可能学的有问题了

免费赠送河蟹一只
2011-02-24 16:49
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
收藏
得分:0 
scanf("%d",a+i);
a+i相当于&a[i];
所以你错了。a[i] <=> *(a+i)
收到的鲜花
  • pcbaichi2011-02-24 17:09 送鲜花  1朵   附言:我很赞同

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-02-24 17:00
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
收藏
得分:0 
回复 6楼 观弈寒儒
多谢各位哦

免费赠送河蟹一只
2011-02-24 17:09
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
以下是引用pcbaichi在2011-2-24 16:49:05的发言:

#include
int main(void)
{
    int i,a[10];
    for(i=0;i<10;i++)
    {
        scanf("%d",a+i);
        printf("%d",a);
    }
    return 0;
}
那你用vc 运行一下,我想请教你一下,这是怎么回事,按你说的,我觉得指针可能学的有问题了
6楼说得是对的。
看这个例子:
int a, *p = &a;

scanf("%d", p);
printf("%d\n", a);
看看从键盘输入的数据,究竟是赋值给了p还是a了呢?
请上机验证一下。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-24 17:33
qq312154421
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:124
专家分:120
注 册:2010-6-7
收藏
得分:0 
楼主的问题还是看不懂啊

勤奋不止,自强不息。
2011-02-24 20:02
qingke
Rank: 1
等 级:新手上路
帖 子:11
专家分:3
注 册:2011-2-24
收藏
得分:0 
回复 楼主 qingke
p0=p;
p=(p+1);
(p+1)=p0;
后面的这种写法就出现错误 error C2106: “=”: 左操作数必须为左值
在(p+1)=p0那行的样子
2011-02-24 20:33
快速回复:C指针的传递问题
数据加载中...
 
   



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

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