| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1548 人关注过本帖
标题:*pi+=2;pi+=2;*pi+=2; 指针问题求解
只看楼主 加入收藏
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
[bo][un]xiaofeixia99999[/un] 在 2008-6-4 17:31 的发言:[/bo]

这个还是不理解.

我觉得可能是*pi+=2没有算.
只有pi+=2算了.
不然不会只等于6

照你那样说.你能说说为什么后面同样是*pi+=2;
后面一个为什么没有算吗


#include <stdio.h>

void change_p(int *pi)
{
    *pi+=2;
     pi+=2; // 只有这个是通过指针传值,改动影响了实参
    *pi+=2;
    printf("%d\n",*pi);
}

main()
{
    int *p,a[]={1,4,7,10};
    p = &a[1];
    change_p(p);
    printf("%d\n",*p);
}
因此上述代码只是把数组改成a[]={1,2,7,10};
然后p = &a[1];这个指向仍来不变,但是子函数内部就是能看成这个后面的后面的*pi+=2;也参加运算了
2008-06-04 18:33
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:0 
不要争了,运行一下不就知道了。
运行结果6
数组a变成{1, 6, 7, 12}

如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2008-06-04 19:00
xiaofeixia99999
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-5-27
收藏
得分:0 
两个人说的都有道理

不知道该听谁的.
2008-06-04 19:52
zzf20cn
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-6-21
收藏
得分:0 
弄明白值传递和指针传递就能理解了.
简单的说
void change_p(int *pi)中,
pi是一个新建的指针变量。
pi的改变并不会改变原参数。
而 *pi 所指向的内容就是数组a的元素。

[[it] 本帖最后由 zzf20cn 于 2008-6-6 17:15 编辑 [/it]]
2008-06-06 17:10
wltysy
Rank: 1
等 级:新手上路
帖 子:560
专家分:0
注 册:2008-5-2
收藏
得分:0 
回复 11# vfdff 的帖子
不明白啊!如果只是pi+=2改变了实参,p就指向了a[3],那程序最后完后运行完后数组怎么改变成{1,6,7,12}啊?
2008-06-06 18:16
smltq
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:566
专家分:400
注 册:2008-1-21
收藏
得分:0 
回复 15# wltysy 的帖子
请仔细看看题目!
2008-06-06 19:16
wltysy
Rank: 1
等 级:新手上路
帖 子:560
专家分:0
注 册:2008-5-2
收藏
得分:0 
11111111
2008-06-06 20:37
wltysy
Rank: 1
等 级:新手上路
帖 子:560
专家分:0
注 册:2008-5-2
收藏
得分:0 
在函数中,指针只能改变它所指向的值,而不能改变它自身的指向.
2008-06-06 20:37
快速回复:*pi+=2;pi+=2;*pi+=2; 指针问题求解
数据加载中...
 
   



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

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