“传值和传址调用”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
| 第40行: | 第40行: | ||
=== 2)传值和传址调用 === | === 2)传值和传址调用 === | ||
| + | |||
| + | ==== 传值调用 ==== | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
void swap(int x, int y) | void swap(int x, int y) | ||
| 第58行: | 第60行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[文件:传值调用.png|无|缩略图]] | [[文件:传值调用.png|无|缩略图]] | ||
| + | |||
| + | |||
| + | ==== 传址调用 ==== | ||
| + | <syntaxhighlight lang="c"> | ||
| + | void swap(int *x, int *y) | ||
| + | { | ||
| + | int a, *t=&a; | ||
| + | *t = *x; | ||
| + | *x = *y; | ||
| + | *y = *t; | ||
| + | printf("%d %d", *x, *y); | ||
| + | } | ||
| + | |||
| + | main() | ||
| + | { | ||
| + | int a = 3, b = 4; | ||
| + | swap(&a, &b); | ||
| + | printf("%d %d", a, b); | ||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | [[文件:传址调用.png|无|缩略图]] | ||
2022年9月15日 (四) 03:40的版本
https://www.bilibili.com/video/BV1hg411V7Bm?p=47
1)数据类型
数据类型
- 数据值是否改变
- 常量:只有右值,值不能改变
- 字符 'a'
- 字符串 "a"
- 整型 1、2
- 变量:有左值和右值,值可改变
- 常量:只有右值,值不能改变
- 作用域
- 全局变量:存储空间一般不变
- 局部变量:存储空间动态变化
- 数据类型
- 基本类型(int/char/float double/bool)
- 特殊类型(void)
- 用户定义类型(enum)
- 构造类型(数组、结构、联合)
- 指针类型(type*)
- 抽象数据类型(类类型)
2)传值和传址调用
| 传递方式 | 主要特点 |
|---|---|
| 传值调用 | 形参取的是实参的值,形参的改变不会导致调用点所传的实参的值发生改变 |
| 引用(地址)调用 | 形参取的是实参的地址,即相当于实参存储单元的地址引用,因此其值的改变同时就改变了实参的值。
|
2)传值和传址调用
传值调用
void swap(int x, int y)
{
int t;
t = x;
x = y;
y = t;
printf("%d %d", x, y);
}
main()
{
int a = 3, b = 4;
swap(a, b);
printf("%d %d", a, b);
}
传址调用
void swap(int *x, int *y)
{
int a, *t=&a;
*t = *x;
*x = *y;
*y = *t;
printf("%d %d", *x, *y);
}
main()
{
int a = 3, b = 4;
swap(&a, &b);
printf("%d %d", a, b);
}