From 03a7c0a9d1745d7eafacf51011c25688463ce675 Mon Sep 17 00:00:00 2001 From: Lion Chan Date: Thu, 5 Jul 2018 00:16:35 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AB=98=E7=BA=A7=E6=8C=87=E9=92=88=E9=83=A8?= =?UTF-8?q?=E5=88=86=E7=BC=96=E5=86=99=E5=AE=8C=E6=AF=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Chapter2 C与C++/2.8 高级指针.md | 97 ++++++++++++++++++++++++++++++--- 1 file changed, 90 insertions(+), 7 deletions(-) diff --git a/Chapter2 C与C++/2.8 高级指针.md b/Chapter2 C与C++/2.8 高级指针.md index 263f60d..f41cff0 100644 --- a/Chapter2 C与C++/2.8 高级指针.md +++ b/Chapter2 C与C++/2.8 高级指针.md @@ -178,6 +178,27 @@ void* p1 = p0; ## 2.8.6 指针与函数 +函数、或者说程序本身在运行时也是要占用内存空间的。因此,可以使用指针,像指向某个变量那样指向这个函数: + +```cpp +typedef void (*P_FUN_TYPE)(int a); + +void fun(int a) +{ + printf("%d", a); +} + +void main(void) +{ + int a = 0x10; + P_FUN_TYPE pfun = fun; + + pfun(a); // 与直接调用 fun(a) 是一样的. +} +``` + +这样可以指向函数的指针称为函数指针。在一般的程序中,函数指针并不常见。但,如果你编写的程序具有某种框架,例如 linux 内核中的驱动框架,就会大量使用函数指针了。 + ## 2.8.7 多级指针 前面提及指针的实质是变量,因此也有一个内存空间用于保存指针的值,同样也有一个内存地址与之对应。这就是说,我们可以通过一个指向指针的指针去访问另一个指针,这被称为二级指针或多级指针。 @@ -187,21 +208,83 @@ int a=10; int* pa = &a; int** ppa = &pa; -printf("%d", **ppa); +printf("%d\n", **ppa); ``` ## 2.8.8 指针参数 +以上所说的全部类型指针都可以作为函数的参数来进行传递。 + +```cpp + +void fun(int* arry, int size) +{ + int i; + + for(i=0; i