数组指针和指针数组,函数指针和指针函数

指针数组和数组指针是两个不同的概念,它们的区别在于定义和使用上的差别。

指针数组是指一个数组里面存储了若干个指针。定义一个指针数组的方式是在类型名前加上一个 * 号,例如 `int *arr[10]`,表示定义了一个包含10个元素的数组,每个元素都是一个指向整型数据的指针。在使用指针数组时,可以通过下标访问数组中的指针,例如 `arr[0]` 表示数组中的第一个元素,是一个指向整型数据的指针。

数组指针是指一个指针,它指向一个数组。定义一个数组指针的方式是在类型名后加上一个 * 号,例如 `int (*p)[10]`,表示定义了一个指向包含10个元素的整型数组的指针。在使用数组指针时,需要先将指针指向一个数组,例如 `int a[10]; p = &a`,表示将指针 `p` 指向数组 `a` 的首地址。然后可以通过指针访问数组中的元素,例如 `(*p)[0]` 表示数组中的第一个元素。

指针函数和函数指针是两个不同的概念,它们的区别在于函数和指针的关系。

指针函数是指一个函数,它返回一个指针。定义一个指针函数的方式是在函数名前加上一个 * 号,例如 `int *func(int n)`,表示定义了一个函数,它接受一个整型参数 `n`,并返回一个指向整型数据的指针。在使用指针函数时,可以通过函数返回值获取指针,例如 `int *p = func(10)` 表示调用函数 `func` 并将返回值赋给指针 `p`。

函数指针是指一个指针,它指向一个函数。定义一个函数指针的方式是在类型名后加上一个 * 号,例如 `int (*p)(int)`,表示定义了一个指向参数为整型数据、返回值为整型数据的函数的指针。在使用函数指针时,需要先将指针指向一个函数,例如 `int func(int n) { return n * 2; } p = &func`,表示将指针 `p` 指向函数 `func` 的地址。然后可以通过指针调用函数,例如 `int res = (*p)(10)` 表示通过指针调用函数 `func` 并将返回值赋给变量 `res`。

函数指针可以用来实现回调函数,回调函数是指一个函数作为参数传递给另一个函数,并在另一个函数中被调用的情况。回调函数常常用于事件处理、异步编程等场景。

下面是一个示例,说明如何用函数指针实现回调函数:
#include <iostream>

using namespace std;

void print_hello() {
    cout << "Hello, world!" << endl;
}

void call_back_function(void (*func)()) {
    func();
}

int main() {
    call_back_function(print_hello); // 将 print_hello 函数作为参数传递给 call_back_function 函数,并在其中被调用
    return 0;
}

在这个示例中,我们定义了两个函数 `print_hello` 和 `call_back_function`。`print_hello` 函数用于输出字符串 "Hello, world!",`call_back_function` 函数接收一个函数指针作为参数,并在函数体中调用该函数。

在 `main` 函数中,我们将 `print_hello` 函数作为参数传递给 `call_back_function` 函数,并在其中被调用。这样,当我们运行程序时,就会输出字符串 "Hello, world!"。

猜你喜欢

转载自blog.csdn.net/weixin_43271137/article/details/130039412