学习
错题
模考
我的
登录/注册/忘记密码
学习 / 函数 / 带指针的函数
带指针的函数
指针形参改外面;数组当参数
1. 指针形参才能改外面
值传递改不了外面的变量。要让函数改 `main` 里的 `a`、`b`,就把**地址**传进去——这是带指针的函数。 ```c void swap(int *p, int *q) { int t; t = *p; *p = *q; *q = t; } int main(void) { int a = 1, b = 2; swap(&a, &b); /* 传地址,不是传 a、b 的副本 */ printf("%d %d\n", a, b); /* 2 1 */ return 0; } ``` 对照: - `void swap(int x, int y)` 再 `swap(a, b)`:里面怎么换,外面仍是 1 2 - `swap(&a, &b)`:`p` 指向 `a`,`*p` 就是 `a` 形参是 `int *`,实参就要写 `&变量`。这和前面「通过指针改变量」是同一件事,只是放到函数里了。
2. 数组传进函数就是指针
数组传进函数,传的是**首元素的地址**,不是整排拷贝。所以函数里改 `a[i]`,外面的数组跟着变。 ```c void set0(int a[], int n) /* 也可写成 int *a */ { int i; for (i = 0; i < n; i++) a[i] = 0; } ``` 调用:`set0(x, 5);`(`x` 是数组名,不要写成 `&x`)。 - `int a[]` 和 `int *a` 作形参,专升本里看成一回事 - 函数不知道数组有多长,长度要**另外用参数**传来(上面的 `n`) - 只需读、不改时,写法一样;改了就是改外面 带指针的函数就记两句:改单个变量传 `&x`;改一排数传数组名。
开始练习
动手写
返回函数
动手写
8 道编程 · 综合运用本阶段知识点
编程题把本阶段知识点串起来用。只看要点不做,认识停在纸面上。
查看本阶段全部编程题
用指针函数交换两数
未做
开始写
用指针函数取相反数
未做
开始写
用指针函数放大一倍
未做
开始写
用函数反转数组
未做
开始写
用函数把负数清零
未做
开始写
用函数交换数组首尾
未做
开始写
用函数判断数组是否对称
未做
开始写
用函数统计指定值次数
未做
开始写
登录
注册
忘记密码
点击此处输入用户名
点击此处输入密码
登录
点击此处输入用户名
点击此处输入密码
点击此处输入邮箱
发送验证码
点击此处输入验证码
点击此处输入邮箱
发送验证码
点击此处输入验证码
点击此处输入新密码