标题:关于调用函数形参和实参的问题
取消只看楼主
zzdloveclp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:108
注 册:2016-11-25
结帖率:100%
已结贴  问题点数:20 回复次数:3 
关于调用函数形参和实参的问题
都知道实参和形参值传递的单向性,为什么在指针数组中,还可以通过改变形参的值就使得指针的指向发生改变了呢,附上程序。
#include<stdio.h>
#include<string.h>
int main()
{
    void sort(char *name[],int n);//函数声明,排序
    void print(char *name[],int n);//函数声明,输出字符串
    char *name[]={"Follow me","BASIC","Great Wall"};//定义一个指针数组,它的元素分别指向三个字符串的首字符地址
    int n=3;
    sort(name,n);
    print(name,n);
    return 0;
 }
 
 void sort(char *name[],int n)
 {
     char *temp;
     int i=0,j=i+1,k;
     for(;i<n-1;i++)
     {k=i;
     for(;j<n;j++)
     if(strcmp(name[k],name[j])>0)k=j;
     if(k!=i)
     {temp=name[i];name[i]=name[k];name[k]=temp;//就是这里,是怎么改变指向的,不是只能单向传递吗,这里改变指向对实参的影响是什么
     }
     }
}

void print(char *name[],int n)
{
    int i;
    for(i=0;i<n;i++)
    printf("%s\n",name[i]);
    return;
}
搜索更多相关主题的帖子: include return 字符串 元素 
2016-12-21 12:16
zzdloveclp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:108
注 册:2016-11-25
得分:0 
#include<stdio.h>
int main()
{
    void swap(int *,int *);
    int a=9,b=5,*pointer1,*pointer2;
    pointer1=&a;pointer2=&b;
    if(a>b)swap(pointer1,pointer2);
    printf("min=%d,max=%d",a,b);
    return 0;
}

void swap(int *p1,int *p2)
{
    int *temp;
    temp=p1;p1=p2;p2=temp;
    return;
 } 这个程序是不对的,这两个的区别是什么

[此贴子已经被作者于2016-12-21 12:25编辑过]

2016-12-21 12:23
zzdloveclp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:108
注 册:2016-11-25
得分:0 
回复 4楼 九转星河
那麻烦你看一下第一个程序,为什么第一个程序可以呢,这里面的区别是什么
2016-12-21 13:13
zzdloveclp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:108
注 册:2016-11-25
得分:0 
回复 3楼 lyl930130
关键是你看第一个程序。他改变的就是目录啊,并不是书的内容,我是看的谭浩强的c程序设计第四版,在书上第279页上说,name【i】和name【k】对换,就是把它们的指向互换,不是换的内容啊,如果对原目录是无影响的,那这个程序是怎么实现的呢?第一个程序和第二个程序不都是换指向吗,为什么第一个对,第二个不对我是能理解的,就是不理解为什么第一个程序是可以的,不知道哪里理解错了。
2016-12-21 13:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-472706-1-1.html




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

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