注:本文是对苏小红版c语言教材第9章的笔记
- &:取地址运算符
- *:间接寻址运算符/解引用运算符
e.g.:
int *pa = &a;//*用于指针变量的定义
int a = 0;
printf("a is %d, &a is %p, pa is %p, *pa is %d", a, &a, pa, *pa);//*用于读取指针变量存储的地址对应的变量的值
输出结果:a与pa相同, &a与pa相同
pa的值和a是等价的,修改了pa的值就相当于修改a的值。可以像使用普通变量一样使用pa
-
永远不要使用为初始化的指针变量
-
在函数中改变实参的值:指针
-
需要从函数返回多个值时,就要用到模拟按引用调用的方法。
-
函数的出口参数:变量的值在函数结束调用后才能被确定
函数的入口参数:变量的值在函数调用前就必须确定 -
函数指针:
e.g.:int (*compare)(int a, int b);//是一个指向函数 int compare(int a, int b)的函数指针
而int *compare(int a, int b);//是一个返回值为int *, 且有2个整型参数的函数
可以把函数指针当成函数名直接使用:
if ((*compare)(a[i], a[k]))
与if(compare(a[i], a[k]))
等价
其中compare指向的是返回值为a < b 或a > b的函数
e.g.:选择函数计算函数值
#include <stdio.h>
int Func(int (*f)(int x), int x);
int f1(int x);
int f2(int x);
int main(){
int x;
int choice;
int result;
printf("please enter your choice:\n");
scanf("%d", &choice);
printf("please enter x:\n");
scanf("%d", &x);
if(choice == 1){
result = Func(f1, x);
}else result = Func(f2, x);
printf("The result is %d", result);
return 0;
}
int f1(int x){
return x + 1;
}
int f2(int x){
return x * x + 2;
}
int Func(int (*f)(int x), int x){
return (*f)(x);//也可以写成 return f(x);
}