“传值和传址调用”的版本间的差异
		
		
		
		
		
		跳到导航
		跳到搜索
		
				
		
		
	
Jihongchang(讨论 | 贡献)  | 
				Jihongchang(讨论 | 贡献)   | 
				||
| (未显示同一用户的3个中间版本) | |||
| 第81行: | 第81行: | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
[[文件:传址调用.png|无|缩略图]]  | [[文件:传址调用.png|无|缩略图]]  | ||
| + | |||
| + | |||
| + | === 考点1:参数传递差异 ===  | ||
| + | 程序语言提供的传值调用机制是将()。  | ||
| + | |||
| + | A、实参的值传递给被调用函数的形参  √  | ||
| + | |||
| + | B、实参的地址传递给被调用函数的形参  | ||
| + | |||
| + | C、形参的值传递给被调用函数的实参  | ||
| + | |||
| + | D、形参的地址传递给被调用函数的实参  | ||
| + | |||
| + | |||
| + | === 考点2:传值和传址调用 ===  | ||
| + | 函数fun1()、fun2()的定义如下:<syntaxhighlight lang="c">  | ||
| + | fun1(int x)   | ||
| + | {  | ||
| + |     int a = x - 1;  | ||
| + |     x = fun2(a);  | ||
| + |     return a - x;  | ||
| + | }  | ||
| + | |||
| + | fun2(int x)  | ||
| + | {  | ||
| + |     x = x + 10;  | ||
| + |     return 3 * x;  | ||
| + | }  | ||
| + | |||
| + | </syntaxhighlight>所示,已知调用fun1时传递给形参x的值是-5,若以引用调用(call by reference)的方式调用fun2,则函数fun1的返回值为();<syntaxhighlight lang="c">  | ||
| + | fun1(int x)  | ||
| + | {  | ||
| + |     int a = x - 1;  | ||
| + |     x = fun2(&a);  | ||
| + |     return a - x;  | ||
| + | }  | ||
| + | |||
| + | fun2(int *x)  | ||
| + | {  | ||
| + |     *x = *x + 10;  | ||
| + |     return 3**x;  | ||
| + | }  | ||
| + | </syntaxhighlight>A、-18    | ||
| + | |||
| + | B、-11  | ||
| + | |||
| + | C、-8  √  | ||
| + | |||
| + | D、0  | ||
| + | |||
| + | 若以值调用(call by value)的方式调用fun2,则函数fun1的返回值为()。  | ||
| + | |||
| + | A、-18  √  | ||
| + | |||
| + | B、-11  | ||
| + | |||
| + | C、-8  | ||
| + | |||
| + | D、0  | ||
2022年9月15日 (四) 04:17的最新版本
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);
}
考点1:参数传递差异
程序语言提供的传值调用机制是将()。
A、实参的值传递给被调用函数的形参 √
B、实参的地址传递给被调用函数的形参
C、形参的值传递给被调用函数的实参
D、形参的地址传递给被调用函数的实参
考点2:传值和传址调用
函数fun1()、fun2()的定义如下:
fun1(int x) 
{
    int a = x - 1;
    x = fun2(a);
    return a - x;
}
fun2(int x)
{
    x = x + 10;
    return 3 * x;
}
所示,已知调用fun1时传递给形参x的值是-5,若以引用调用(call by reference)的方式调用fun2,则函数fun1的返回值为();
fun1(int x)
{
    int a = x - 1;
    x = fun2(&a);
    return a - x;
}
fun2(int *x)
{
    *x = *x + 10;
    return 3**x;
}
A、-18
B、-11
C、-8 √
D、0
若以值调用(call by value)的方式调用fun2,则函数fun1的返回值为()。
A、-18 √
B、-11
C、-8
D、0