📜  将指针传递给指针与任何函数的指针地址之间的区别(1)

📅  最后修改于: 2023-12-03 14:53:51.071000             🧑  作者: Mango

将指针传递给指针与任何函数的指针地址的区别

在C语言中,将指针传递给指针和将任何函数的指针地址作为参数传递之间有显著的区别。下面将详细介绍这两者之间的差异。

将指针传递给指针

当将指针作为参数传递给函数时,传递的是指针的值(即指针所指向的内存地址)。通过传递指针的值,函数可以间接地访问和修改指针所指向的数据。这种传递方式也称为按指针传递。

示例代码如下所示:

#include <stdio.h>

void modifyValue(int* p) {
    *p = 10;  // 修改指针所指向的值为10
}

int main() {
    int num = 5;
    int* ptr = &num;
    
    printf("Before modification: %d\n", *ptr);  // 输出: Before modification: 5
    
    modifyValue(ptr);  // 将指针ptr的值传递给modifyValue函数
    
    printf("After modification: %d\n", *ptr);   // 输出: After modification: 10
    
    return 0;
}

在上述示例中,modifyValue 函数接收一个指针参数 p,并通过 *p 修改了指针所指向的值。

任何函数的指针地址作为参数传递

任何函数的指针地址是指将一个函数的指针作为参数传递给另一个函数。传递函数指针地址的主要目的是允许在运行时决定调用哪个函数。

示例代码如下所示:

#include <stdio.h>

void func1() {
    printf("This is function 1\n");
}

void func2() {
    printf("This is function 2\n");
}

void callFunction(void (*func)()) {
    func();  // 通过函数指针调用函数
}

int main() {
    void (*ptr)();
    
    ptr = func1;  // 将func1的地址赋值给指针ptr
    callFunction(ptr);  // 输出: This is function 1
    
    ptr = func2;  // 将func2的地址赋值给指针ptr
    callFunction(ptr);  // 输出: This is function 2
    
    return 0;
}

在上述示例中,callFunction 函数接收一个函数指针参数 func,通过 func() 调用了相应地址上的函数。

结论

总结来说,将指针传递给指针是为了让函数能够修改指针所指向的值,而传递任何函数的指针地址则是为了在运行时动态决定调用不同的函数。这两者在实际开发中具有不同的用途和应用场景,程序员可以根据具体需求进行选择和使用。