c语言指针
1. 指针是一种数据类型
如:int * ,char * ,*单目运算符,表示指针上的变量;
2.取变量的地址用&
如int a = 1; int * p = &a 表示把指向a的内存地址赋给指针变量p;
3.指针变量可以做左值,也可以做右值
如 int a = 1;
int * p = &a;
int b = *p; (右值)
*p = 2;(左值)
4.数组指针(指向数组中第一个元素的常量指针)
如 int k[] = {0,1,2,3}; (数组变量k本身表达地址)
int * p = k;
p = k[0]
p = &k;
5.函数指针
函数指针是指向函数的指针变量。
typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型
int max(int x, int y)
{
return x > y ? x : y;
}
/* p 是函数指针 */
int (* p)(int, int) = & max; // &可以省略
/* 与直接调用函数等价,d = max(max(a, b), c) */
d = p(p(a, b), c);
6. 回调函数
函数指针作为某个函数的参数
函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。
简单讲:回调函数是由别人的函数执行时调用你实现的函数。
#include <stdlib.h>
#include <stdio.h>
// 回调函数
void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{
for (size_t i=0; i<arraySize; i++)
array[i] = getNextValue();
}
// 获取随机值
int getNextRandomValue(void)
{
return rand();
}
int main(void)
{
int myarray[10];
/*getNextRandomValue 可理解为实参*/
populate_array(myarray, 10, getNextRandomValue);
for(int i = 0; i < 10; i++) {
printf("%d ", myarray[i]);
}
printf("\n");
return 0;
}
浙公网安备 33010602011771号