C && 指针
在计算机程序中,每一个变量都有一个相应的内存位置。每一个内存位置都定义了可使用 & 运算符访问的地址,它表示了在内存中的一个地址。
int main () { int var_runoob = 10; int *p; // 定义指针变量 p = &var_runoob; printf("var_runoob 变量的地址: %p\n", p); return 0; }
// var_runoob 变量的地址: 0x7ffeeaae08d8
指针也就是内存地址。
*p -- 指针变量,它也是一种变量,用于存放变量(var_runoob)的内存地址的变量 --》&var_runoob
#include <stdio.h> int main () { int var = 20; /* 实际变量的声明 */ int *ip; /* 指针变量的声明 */ ip = &var; /* 在指针变量中存储 var 的地址 */ printf("var 变量的地址: %p\n", &var ); /* 在指针变量中存储的地址 */ printf("ip 变量存储的地址: %p\n", ip ); /* 使用指针访问值 */ printf("*ip 变量的值: %d\n", *ip ); return 0; }
var 变量的地址: 0x7ffeeef168d8 &var :取该变量在内存中的地址
ip 变量存储的地址: 0x7ffeeef168d8
*ip 变量的值: 20 通过内存地址,找到存放在该内存的var变量的值。
把 ptr 声明为一个数组,由 MAX 个整数指针组成。因此,ptr 中的每个元素,都是一个指向 int 值的指针。下面的实例用到了三个整数,它们将存储在一个指针数组中,
const int MAX = 3; int main () { int var[] = {10, 100, 200}; int i, *ptr[MAX]; for ( i = 0; i < MAX; i++) { ptr[i] = &var[i]; /* 赋值为整数的地址 */ } for ( i = 0; i < MAX; i++) { printf("Value of var[%d] = %d\n", i, *ptr[i] ); } return 0; }
函数指针
函数指针是指向函数的指针变量。
通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。
函数指针可以像一般函数一样,用于调用函数、传递参数。
函数指针变量的声明:
typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型
https://www.runoob.com/cprogramming/c-fun-pointer-callback.html