鱼C论坛

 找回密码
 立即注册
查看: 1253|回复: 2

[已解决]求助

[复制链接]
发表于 2016-3-9 11:17:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
关于C语言函数调用者有点不大清楚,看如下程序
#include<stdio.h>
int main()
{
        int a = 3, b = 5;
        void swap(int, int);
        swap(a, b);
        printf("%d%d", a, b);
        return 0;
}
void swap(int x, int y)
{
        int temp;
        temp = x;
        x = y;
        y = temp;

}我知道实参形参是单向值传递,形参不会改变实参值,所以结果还是a=3,b=5,但是如果把程序改为#include<stdio.h>
int main()
{
        int a[2] = { 3,5 };
        void swap(int b[2]);
        swap(a);
        printf("%d%d", a[0], a[1]);
        return 0;
}
void swap(int b[2])
{
        int temp;
        temp = b[0];
        b[0] = b[1];
        b[1] = temp;

}为什么a=5,b=3就交换了呢。
最佳答案
2016-3-9 12:10:29
数组可以用指针来理解,定义a[2] = { 3,5 }后,a就是指向数组第一个元素的指针,你传进swap的参数就是数组的指针,但在swap里面执行的是交换实际数组里面的值,所以在main函数里,a[0] a[1]的值也交换了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-9 12:10:29 | 显示全部楼层    本楼为最佳答案   
数组可以用指针来理解,定义a[2] = { 3,5 }后,a就是指向数组第一个元素的指针,你传进swap的参数就是数组的指针,但在swap里面执行的是交换实际数组里面的值,所以在main函数里,a[0] a[1]的值也交换了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-9 12:20:55 | 显示全部楼层
第二种写法其实传给函数的是个数组的地址或者说是个指针,这样函数内部就可以通过指针间接访问原数组的内存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 20:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表