| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 395 人关注过本帖
标题:求帮忙看看我的指针问题
只看楼主 加入收藏
xz842266736
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-5-30
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:1 
求帮忙看看我的指针问题
#include<stdio.h>
int main()
{void swap(int *p1,int *p2);
......这里我就不打了。
}
void swap(int *p1,int *p2)
{
    int temp;
    temp=*p1;
    *p1=*p2;
    *p2=temp;}
为什么执行了这个函数,回归后,使实参的值也改变了(我自己的理解是这里是改变了实参的地址符,不知对不对)


而这个
void swap(int *p1,int *p2)
{
    int *p;
    p=p1;
    p=p2;
    p2=p
}
如果用这个的话,则改变不了实参,(我自己的理解就是这里只是实现了值互换,而形参的值不能传递给实参,返回的也是地址符,只是地址符没改变。)我不知道这样理解对不对啊,求大神赐教。

[ 本帖最后由 xz842266736 于 2014-5-31 08:44 编辑 ]
搜索更多相关主题的帖子: include 
2014-05-31 08:40
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:10 
C语言中,函数调用时的参数传递是 值传递,即“传值调用”,也就是把实参变量的拷贝传给了形参后,
实参和形参之间就再没其他关系了,函数中对形参的处理都和实参无关
因此在学习指针之前,想用函数调用来改变实参的值,那是不可能的
想通过函数调用来改变实参的值(比如你的程序就是交换两个实参的值),就是通过指针

指针作参数 来进行函数调用,实参和形参指向同一块内存地址,那么函数中对形参的处理也就是对实参的处理,即“传引用调用”
但是也会分为“对地址的处理”和“对值的处理”,对地址的处理是不会改变 地址对应的值的

现在我们假设两个整形变量   a=1,b=2;  那么 &a,&b 就是其各自的地址
void swap(int *p1,int *p2)
{
    int temp;
    temp=*p1;
    *p1=*p2;
    *p2=temp;}  如果通过这个函数进行处理(“对值的处理”)

p1=&a,p2=&b;    那么*p1,*p1  分别对应的就是实参那块内存地址的值,它两交换就是实参值的交换,所以改变了实参的值

void swap(int *p1,int *p2)
{
    int *p;
    p=p1;
    p=p2;
    p2=p}  如果通过这个函数进行处理(“对地址的处理”)

p1=&a,p2=&b;   p1 ,p2 交换其实就是 两个实参 a 和 b 地址的交换,再怎么交换 &a 和 &b 所指向的值始终是不会变的,所以不会改变实参的值

三十年河东,三十年河西,莫欺少年穷!
2014-05-31 11:25
快速回复:求帮忙看看我的指针问题
数据加载中...
 
   



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

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