c 指针(指针和函数)

    技术2025-07-24  14

    程序栈

    支持函数执行的内存区域,通常和堆共存。即二者共同拥有一块内存区域,栈位于内存区域的下部,堆位于内存区域的上部。

    函数传值
    用指针传递数据: 一般用于对传入的数据进行修改 void funcA(int* num1,int* num2){ int temp; temp = *num1; *num1 = *num2; *num2 = temp; } int main(){ int n1 = 10; int n2 = 20; funcA(&n1,&n2); //交换n1和n2 的值 // n1 = 20 , n2 = 10 } //说明:在main函数中调用funcA的时候,使用了指针传递数据,执行到funcA的时候,funcA函数 //内部的局部变量,指向的值传递数据的地址,修改指向这个地址的值。即使函数执行完了也不影响 //已经修改过的值 用值传递:一般不对传入的数据修改,取决于其数据的拷贝赋值函数的实现 void funcA(int num1,int num2){ int temp; temp = num1; num1 = num2; num2 = temp; } int main(){ int n1 = 10; int n2 = 20; funcA(n1,n2); //交换n1和n2 的值,失败 // n1 = 10 , n2 = 20 } //执行funcA函数的时候,会将n1和n2分别拷贝一份副本,作为funcA局部变量使用,源数据没有在函数funcA中执行任何操作。因此数据不会发生变化。 用常量指针进行传递数据:和1的使用类似,不同的是指向常量的指针将不可以被修改。 void funcA(const int* num1,int* num2){ *num2 = *num1; } void funcB(const int* num1,int *num2){ int a = 100; num1 = &a; *num2 = *num1; } void funcC(const int* const num1,int *num2){ *num2 = *num1; } 说明: funcA 和funcB 都传入了指向常量的指针,但是在funcB中还是隐式的将num1给更改了,要使的num1 不被更改应该使用const int* const num1 作为参数,具体参考 c指针相关文章
    返回指针
    在函数中有分配有效的内存空间,可以返回指针在函数参数中有引用或者指针被传入,可以返回对应的指针不可以返回局部数据的指针,会出现程序异常
    函数指针

    函数指针表示持有函数地址的指针。可以用于将函数赋值给这个函数指针,然后有函数指针进行数据的调用执行

    例如:

    void (*foo)() void (*foo) () 返回值 函数指针变量的名字 参数

    示例:

    int* f() 返回int类型指针的普通函数。 int (*f)() 返回int类型的函数指针。

    int* (*f)()返回int类型指针的函数指针。

    使用示例:

    int (*fptr)(int); int square(int num){ return num * num; } int main(){ int num = 10; fptr = square; //使用函数指针 cout << fptr(num) << endl; //100 }
    函数指针作为参数的使用
    即这个要求传入的参数是一个符合函数指针定义的函数 int (*fptr)(int); typedef int (*fptr1)(int,int); int square(int num){ return num * num; } int sum(int num1, int num2){ return num1 * num2; } //要求传入的函数符合fptr1的类型定义,函数sum符合这个定义。 int square1(int num, fptr1 fp){ return fp(num,num); } int main() { int num = 10; fptr = square; cout << fptr(num) << endl; //传入函数指针的数据是sum函数 square1(num,sum); return 0; }
    函数指针作为返回值

    即函数返回值需要符合函数定义时候的函数指针要求

    //函数指针定义 typedef int (*rfunc)(int,int); //一般函数定义 int Summer(int num1 ,int num2){ return num1 + num2; } //返回函数指针的函数定义 rfunc returnFuncInfo(int style){ if(style == 1){ return Summer; } return Summer; } int main() { //调用函数,返回函数指针 rfunc ff = returnFuncInfo(1) ; //执行返回的函数指针。实际执行的是符合函数指针的函数。 cout << ff(10,23); //33 return 0; }
    Processed: 0.010, SQL: 9