OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3439|回复: 5

调用 C 的函数,参数传递往往是传值,请大家看我的程序,感觉理解不了

[复制链接]

1

主题

8

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-5-18
在线时间
11 小时
发表于 2016-9-2 16:59:58 | 显示全部楼层 |阅读模式
1金钱
#include<stdio.h>

void swap(int m,int n)
{
     int temp;
     temp = m;
     m = n;
     n = temp;
}
main()
{
    int x,y;
    x = 5;
    y = 10;
    swap(x,y);
    printf("%d,%d\n",x,y);
}
用这个swap函数,并不能将x,y的值对换,因为函数是值传递,请大家帮忙怎么理解这个程序,打不开思路了。

最佳答案

查看完整内容[请看2#楼]

值传递是将实参的值复制给形参,实参形参不是存在同一内存,所以改变不了。 你这里要地址传递(引用传递)才能实现交换xy的值。 void swap(int *m,int *n) { int temp; temp = *m; *m = *n; *n = temp; } main() { int x,y; x = 5; y = 10; swap(&x,&y); printf("%d,%d\n",x,y); } 这样就能实现
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-9-2 16:59:59 | 显示全部楼层
值传递是将实参的值复制给形参,实参形参不是存在同一内存,所以改变不了。
你这里要地址传递(引用传递)才能实现交换xy的值。
void swap(int *m,int *n)
{
     int temp;
     temp = *m;
     *m = *n;
     *n = temp;
}

main()
{
    int x,y;
    x = 5;
    y = 10;
    swap(&x,&y);
    printf("%d,%d\n",x,y);
}
这样就能实现
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12691
金钱
12691
注册时间
2012-11-26
在线时间
3710 小时
发表于 2016-9-2 17:23:09 | 显示全部楼层
你该传的是地址    重写调换函数,传入参数设为指针,学C语言最初的几个课程就该教了这些吧
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-5-18
在线时间
11 小时
 楼主| 发表于 2016-9-2 17:28:11 | 显示全部楼层
jermy_z 发表于 2016-9-2 17:23
你该传的是地址    重写调换函数,传入参数设为指针,学C语言最初的几个课程就该教了这些吧

对,在弄指针,就是感觉不传他的地址过去,根本没把值传过去
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-5-18
在线时间
11 小时
 楼主| 发表于 2016-9-2 17:30:07 | 显示全部楼层
Da Wen 发表于 2016-9-2 17:24
值传递是将实参的值复制给形参,实参形参不是存在同一内存,所以改变不了。
你这里要地址传递(引用传递) ...

是的,是这样的,在看指针,书上面的例子,就是不明白,一定要传这两个数的地址才能实现交换
回复

使用道具 举报

2

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
410
金钱
410
注册时间
2016-5-6
在线时间
110 小时
发表于 2016-9-3 11:45:22 | 显示全部楼层
簡單的方式是你可以在swap函數內

打印變數的值和地址

在調用swap函數,前後各打印一次變數的值和地址

在去理解一下,換成指針後也可以用這個思路
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 09:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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