| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 511 人关注过本帖
标题:关于值传递的一个问题
只看楼主 加入收藏
nixk
Rank: 2
等 级:论坛游民
帖 子:32
专家分:12
注 册:2014-9-10
结帖率:83.33%
收藏
已结贴  问题点数:5 回复次数:6 
关于值传递的一个问题
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void sortString(char *p[],int n);

void
main(void)
{
    int i = 0;
    char *name[] = {"Pascal","Basic","C","FORTRAN","Computer design"};
    sortString(name,5);
    for(i = 0;i < 5;i++)
        printf("%s\n",name[i]);

}

void
sortString(char *p[],int n)
{
    char *tmp = NULL;
    int i = 0,j = 0;
    for(i = 0;i < n - 1;i++)
    {
         for(j = i + 1;j < n;j++)
         {
             if(strcmp(p[i],p[j]) > 0)
             {
                 tmp = p[i];
                 p[i] = p[j];
                 p[j] = tmp;
             }
         }
    }
}

调用上面的函数是不是说p和name共用相同的地址,直接改变指针数组p里面元素的指向,而不是交换内存里的内容,函数调用完不是释放掉了么,为什么可以影响name[],求教
搜索更多相关主题的帖子: color 
2014-09-26 14:04
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:2 
简单说说:
C语言的函数调用多数都是服从值传递的过程。
但是有一点是例外的,如果是指针传递,那么传递过去地址之后,可以对该地址进行读写。
所以传递地址的按值传送是有很大的优点,同时会带来很糟糕的后果
2014-09-26 21:10
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:2 
回复 楼主 nixk
就如一楼所说的,对数组的调用实际上是对数组地址的调用,在函数中用指针作形参时,调用后会改变实参的值
2014-09-26 23:26
zhoujicheng
Rank: 1
来 自:广西
等 级:新手上路
帖 子:4
专家分:9
注 册:2014-9-26
收藏
得分:2 
指针用完了要重新负初值的    谭浩强《C语言程序设计》233页有解说de
2014-09-27 11:37
nixk
Rank: 2
等 级:论坛游民
帖 子:32
专家分:12
注 册:2014-9-10
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

void swap(int *a,int *b);

void
main(void)
{
    int *a = (int *)malloc(4);
    int *b = (int *)malloc(4);
    printf("a = ");
    scanf("%d",a);
    printf("b = ");
    scanf("%d",b);
    swap(a,b);
    printf("a = %d,b = %d\n",*a,*b);
}

void
swap(int *a,int *b)
{
    int *tmp = a;
    a = b;
    b = tmp;
}
}


我再附加一个例子哦,这个应该原理跟上面的是一样的,可是没能实现数据转换
但是如果函数里面这么写
    int tmp = *a;
    *a = *b;
    *b = tmp;
就可以,所以感觉很迷惑
2014-09-27 11:51
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:2 
指针做实参时,指针(也是一个变量)的值是不能改变的,但是指针指向的数据可以被改变
2014-09-29 11:09
编程小猪
Rank: 1
等 级:新手上路
帖 子:33
专家分:4
注 册:2022-10-17
收藏
得分:0 
回复 6楼 书生等待
求教,所以实参是变量就是单项值传递,室参是地址就能改变值?

专升本备考中!!!
2022-10-22 12:53
快速回复:关于值传递的一个问题
数据加载中...
 
   



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

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