wenlue 发表于 2016-3-9 11:17:19

求助

关于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 = { 3,5 };
        void swap(int b);
        swap(a);
        printf("%d%d", a, a);
        return 0;
}
void swap(int b)
{
        int temp;
        temp = b;
        b = b;
        b = temp;

}为什么a=5,b=3就交换了呢。

shuofxz 发表于 2016-3-9 12:10:29

数组可以用指针来理解,定义a = { 3,5 }后,a就是指向数组第一个元素的指针,你传进swap的参数就是数组的指针,但在swap里面执行的是交换实际数组里面的值,所以在main函数里,a a的值也交换了

linxingcs 发表于 2016-3-9 12:20:55

第二种写法其实传给函数的是个数组的地址或者说是个指针,这样函数内部就可以通过指针间接访问原数组的内存
页: [1]
查看完整版本: 求助