精华内容
下载资源
问答
  • C语言函数指针变量

    2021-05-20 12:09:09
    C语言函数指针变量导语:在C语言中规定,一个函数总是占用一段连续的内存区, 而函数名就是该函数所占内存区的首地址。 这就是函数指针变量。下面是相关介绍,仅供参考!在C语言中规定,一个函数总是占用一段连续的...

    C语言函数指针变量

    导语:在C语言中规定,一个函数总是占用一段连续的内存区, 而函数名就是该函数所占内存区的首地址。 这就是函数指针变量。下面是相关介绍,仅供参考!

    在C语言中规定,一个函数总是占用一段连续的内存区, 而函数名就是该函数所占内存区的首地址。 我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量, 使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。 我们把这种指向函数的指针变量称为“函数指针变量”。

    函数指针变量定义的一般形式为:

    类型说明符 (*指针变量名)();

    其中“类型说明符”表示被指函数的返回值的'类型。“(* 指针变量名)”表示“*”后面的变量是定义的指针变量。 最后的空括号表示指针变量所指的是一个函数。

    例如: int (*pf)();

    表示pf是一个指向函数入口的指针变量,该函数的返回值(函数值)是整型。

    下面通过例子来说明用指针形式实现对函数调用的方法。

    int max(int a,int b){

    if(a>b)return a;

    else return b;

    }

    main(){

    int max(int a,int b);

    int(*pmax)();

    int x,y,z;

    pmax=max;

    printf("input two numbers:/n");

    scanf("%d%d",&x,&y);

    z=(*pmax)(x,y);

    printf("maxmum=%d",z);

    }

    从上述程序可以看出用,函数指针变量形式调用函数的步骤如下:

    1. 先定义函数指针变量,如后一程序中第9行 int (*pmax)();定义pmax为函数指针变量。

    2. 把被调函数的入口地址(函数名)赋予该函数指针变量,如程序中第11行 pmax=max;

    3. 用函数指针变量形式调用函数,如程序第14行 z=(*pmax)(x,y); 调用函数的一般形式为: (*指针变量名) (实参表)使用函数指针变量还应注意以下两点:

    a. 函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。

    b. 函数调用中"(*指针变量名)"的两边的括号不可少,其中的*不应该理解为求值运算,在此处它只是一种表示符号。

    【C语言函数指针变量】相关文章:

    展开全文
  • 我们把这种指向函数的指针变量称为“函数指针变量”。函数指针变量定义的一般形式为:类型说明符 (*指针变量名)();其中“类型说明符”表示被指函数的返回值的类型。“(* 指针变量名)”表示“*...

    C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。

    函数指针变量定义的一般形式为:

    类型说明符  (*指针变量名)();

    其中“类型说明符”表示被指函数的返回值的类型。“(* 指针变量名)”表示“*”后面的变量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。例如:

    int (*pf)();

    表示pf是一个指向函数入口的指针变量,该函数的返回值(函数值)是整型。

    在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。定义指针型函数的一般形式为:

    类型说明符 *函数名(形参表) {

    /*函数体*/

    }

    一个数组的元素值为指针则是指针数组。 指针数组是一组有序的指针的集合。 指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。指针数组说明的一般形式为:

    类型说明符 *数组名[数组长度]

    其中类型说明符为指针值所指向的变量的类型。例如:

    int *pa[3]

    表示pa是一个指针数组,它有三个数组元素,每个元素值都是一个指针,指向整型变量。

    指针数组也常用来表示一组字符串,这时指针数组的每个元素被赋予一个字符串的首地址。指向字符串的指针数组的初始化更为简单。例如在例10.32中即采用指针数组来表示一组字符串.

    C语言中指针变量如何向函数中传递

    指针变量存储的是地址,所以在函数调用的时候我们能否将指针变量传递给函数?如果不知道结果,那我们可以直接问电脑,输入如下一段代码. void GetMemory(char *p) { p = (char ...

    c++中函数中变量内存分配以及返回指针、引用类型的思考

    众所周知,我们在编程的时候经常会在函数中声明局部变量(包括普通类型的变量.指针.引用等等). 同时,为了满足程序功能的需要,函数的返回值也经常是指针类型或是引用类型,而这返回的指针或是引用也经常指向函 ...

    [C++程序设计]用函数指针变量调用函数

    指针变量也可以指向一个函数.一个函数在编译时被分配给一个入口地址.这个函数入口地址就称为函数的指针.可以用一个指针变量指向函数,然后通过该指针变量调用此函数 #include

    C++(二十二) — 指针变量、函数指针、void指针

    1.指针变量 (1)指针变量必须在初始化后才可以正常使用,初始化就是给他分配一个有效的数据地址. 先初始化,后使用. (2)指针可以进行加减运算,++ 或者 --:将指针的位置向前或者向后移动一个数据 ...

    【C语言入门教程】4.5 指针变量的定义与引用

    指针变量是包含内存地址的变量.一般的变量直接包含一个特定的值,而指针变量包含的是某一特定数据类型的内存地址.普通变量直接引用其中的值,指针变量则间接引用所指向内存地址中的值.指针变量在使用前需要声明与 ...

    C语言_指针变量的赋值与运算,很详细

    指针变量的赋值 指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值.未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机.指针变量的赋值只能赋予地址, 决不能赋予任何其它数据 ...

    C语言---指针变量详解1

    数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量.在C语言中,允许用一个变量来存放指针,这种变量称为指针变量.指针变量的值就是某份数据的地址,这样的一份数据可以是数 ...

    c语言中数组名和指针变量的区别

    编译器工作原理:在64位的计算机中,当创建一个指针变量时,计算机会为它分配8个字节的存储空间.但如果创建的是数组呢?计算机会为数组分配存储空间,但不会为数组变量分配任何空间,编译器仅在出现它的地方把它 ...

    C语言指针篇(一)指针与指针变量

    指针 1. 什么是指针?    2. 指针可不可怕? 3. 指针好不好玩? 4. 怎么学好指针?     C语言是跟内存打交道的语言,指针就是内存地址.指针无处不在,指针并不可怕,相反,等你学到一定程 ...

    随机推荐

    EF6 对多个数据库,多个DBContext的情况 进行迁移的方法。

    参见: http://stackoverflow.com/questions/21537558/multiple-db-contexts-in-the-same-db-and-application- ...

    row_number()over(order by id) SQL顺序排列

    select *,row_number()over(order by id) as number_id from [dbo].tb_pccw20140213

    DllImport 相关错误

    问题: 当我用 [DllImport("*.dll", EntryPoint = "*",CallingConvention = CallingConventi ...

    Tiny6410声卡驱动——录音与回放

    在Linux下,音频设备程序的实现与文件系统的操作密切相关.Linux将各种设备以文件的形式给出统一的接口,这样的设计使得对设备的编程与对文件的操作基本相同,对Linux内核的系统调用也基本一致,从而 ...

    (Trie) uvalive 3942 Remember the word

    题意:告诉你一个母串和子串,能用多少种不同的方案组合出母串. 思路:字典树(显然)+DP DP: dp[i]+=dp[j+1]  i<=j<=m-1,且i到j的字符串能在字典树中找到.也就 ...

    openstack 在线repo

    https://repos.fedorapeople.org/repos/openstack/openstack-kilo/

    如何停止IIS

    当一台计算机同时安装了IIS服务器和apache服务器的时候,需要运行其中的一个服务器就需要将另一个服务器停止,那么如何停止IIS服务器: 双击[world wide web publishing s ...

    Javascript技巧实例精选&lpar;2&rpar;—文字水平方向上动态漂移

    >>点击这里下载html源文件代码<< 采用Javascript实现,文字水平方向上动态漂移 这是截图 这是相应的Javascript代码

    java内存模型二

    数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性.数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a = 1;b = a; 写一个变量之 ...

    BZOJ&lowbar;2809&lowbar;&lbrack;Apio2012&rsqb;dispatching&lowbar;可并堆

    BZOJ_2809_[Apio2012]dispatching_可并堆 Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称 ...

    展开全文
  • 1.在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针函数。 返回指针函数的一般形式为:类型名 * 函数名(参数列表) #include <stdio.h> int *findNum(int a[], int len, ...

    一、指针型函数
    1.在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。
    返回指针的函数的一般形式为:类型名 * 函数名(参数列表)

    #include <stdio.h>
    
    int *findNum(int a[], int len, int num);
    int main(void)
    {
        int arr[] = {1,2,3,56,78};
        int num;
    
        printf("请输入一个整数:\n");
        scanf("%d", &num);
        int *p = findNum(arr, 5, num);
        if (p == NULL)
            printf("Not found!\n");
        else
           //打印输入数字的地址和输入数字对应的下标
            printf("%p, %lu\n", p, p - arr); //1 2 3 56 78 
        return 0;                            //arr  p
    }
    //查找一个用户输入的数字,找到返回该数字地址,并输出下标。否则返回为空。
    int *findNum(int a[], int len, int num)
    {
        for (int i = 0; i < len; i ++)
        {
            if (a[i] == num)
                return a + i;
        }
        return NULL;
    }
    
    
     注意:函数不可以返回局部变量的指针,函数调用结束,局部变量的空间已经被释放了,这    个时候这个空间的指针已经成为了 —— 悬垂指针。
    

    2.函数可返回指针的类型。
    1) 作为函数参数传入的指针可以返回。
    2) 使用动态内存分配的空间的地址可以返回。
    malloc, 堆区—需要手动释放
    3) 静态变量和全局变量的指针可以返回。
    二、函数指针变量
    函数编译之后,也会占用一定的内存空间,那么也就具有地址。把这个函数的地址,就叫做函数的指针。把函数的指针就叫做函数的入口地址。
    定义的一般形式:函数的返回值类型 (*指针变量名)(形式参数1, 形式参数2, …);

    int sum(int a, int b)
    {
        return a+b;
    }
    int main(void)
    {
        // 定义一个指针变量p,指向sum函数
        int (*p)(int a, int b) = sum;
        // 或者 int (*p)(int, int) = sum;
        // 或者 int (*p)() = sum;
        // 利用指针变量p调用函数
        int result = (*p)(1, 3);
        // 或者 int result = p(1, 3);
        printf("%d\n", result);//4
        
        return 0;
    }
    
    

    三、指向指针的指针
    如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量 为指向指针的指针变量。
    二级指针:数据类型 ** 变量名;

    int main(void)
    {
        int a = 10;
        int *p = &a;
        int **p1 = &p;
    
        printf("a = %d, *p = %d, **p1 = %d\n", a, *p, **p1);//a = 10, *p = 10, **p1 = 10
        printf("p = %p, &a = %p, *p1 = %p\n", p, &a, *p1);//p = 0x7ffeefbff518, &a = 0x7ffeefbff518, *p1 = 0x7ffeefbff518
        printf("&p = %p, p1 = %p\n", &p, p1);//&p = 0x7ffeefbff510, p1 = 0x7ffeefbff510
        
        return 0;
    }
    
    

    四、通用类型指针
    void *
    1)任何类型的指针都可以赋值给 void *
    void *p;
    int *p1;
    char *p2;
    float *p3;
    p = p1; p = p2; p = p3;

    2)不能直接进行解引用 *pvoid,如果要进行解引用,需要进行
    强制转换。

    3)如果void * 赋给其他类型类型的指针,需要强制转换。
    void *p;
    int *p1;
    char *p2;
    float *p3;

    p1 = (int *)p;
    p2 = (char *)p;
    p3 = (float *)p;

    1. void *都用于函数的参数和函数的返回值。
    展开全文
  • 函数调用求a和b中的最大值 输出样例: Enter a and b 34 98 a = 34 b = 98 max = 98 -------------------------------- Process exited after 3.787 seconds with return value 0 请按任意键继续. . . 方法一...

    练习03-18-01

    用函数调用求a和b中的最大值

    输出样例:

    Enter a and b
    34
    98
    a = 34
    b = 98
    max = 98
    
    --------------------------------
    Process exited after 3.787 seconds with return value 0
    请按任意键继续. . .

    方法一(通过函数名调用函数)

    //利用函数调用求最大值
    #include<stdio.h>
    int main()
    {
    	int max(int x,int y);
    	int a,b,c;
    	printf("Enter a and b\n");
    	scanf("%d%d",&a,&b);
    	c=max(a,b);
    	printf("a = %d\nb = %d\nmax = %d\n",a,b,c);
    	return 0;
     } 
     int max(int x,int y)
     {
     	int z;
     	z=x>y?x:y;
     	return z;
     }

    方法二(通过指针变量访问其所指向的函数)

    //通过指针变量访问它所指向的函数 
    #include<stdio.h>
    int main()
    {
    	int max(int x,int y);
    	int (*p)(int,int); 
    	p=max;
    	int a,b,c;
    	printf("Enter a and b\n");
    	scanf("%d%d",&a,&b);
    	c=(*p)(a,b);
    	printf("a = %d\nb = %d\nmax = %d\n",a,b,c);
    	return 0;
     } 
     int max(int x,int y)
     {
     	int z;
     	z=x>y?x:y;
     	return z;
     }

     

    展开全文
  • #include <stdio.h> void maxminvalue(int b[], int n); int max, min; void main() { int i, a[] = {21,34,11,45,89,26,87,39,63,50}, n; n = sizeof(a)/sizeof(a[0]); maxminvalue(a, n);....
  • C++函数指针变量调用函数 在C++中,指针变量也可以指向一个函数,一个函数在编译时被分配给一个入口地址,这个函数入口地址就称为函数的指针,可以用一个指针变量指向函数,然后通过该指针变量调用此函数。 指向函数...
  • 在C语言中,函数指针变量常见的用途之一是作为函数的参数,将函数名传给其他函数的形参。这样就可以在调用一个函数的过程中根据给定的不同实参调用不同的函数。例如,利用这种方法可以编写一个求定积分的通用函数,...
  • 浅析C++中的函数与指针用函数指针变量调用函数指针变量也可以指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数...
  • c语言指针变量作为函数参数传递在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部...
  • 结构体是由一系列具有相同类型或不同类型的数据构成的数据...函数指针函数类型 (*指针变量名)(形参列表);第一个括号一定不能少。“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的...
  • C语言函数指针的用法

    2021-05-21 08:54:01
    这篇文章简单的叙述一下函数指针在结构体中的应用,为后面的一系列文章打下基础引言指针是C语言的重要组成部分, 于是深入理解指针并且高效地使用指针可以使程序员写出更加老练的程序。我们要记住指针是一个指向内存...
  • 指针函数:指针函数本质是一个函数,只不过返回值为某一类型的指针(地址值)。函数返回值必须用同类型的变量来接受,也就是说,指针函数的返回值...)函数指针函数指针本质是一个指针,只不过这个指针指向一个函数...
  • 也可以用一个指针变量指向一个函数的入口地址,称为函数指针,通过函数指针调用函数更加灵活,也更具有通用性。1 函数的入口地址所有函数的代码最终都被编入.exe文件并随.exe文件装载到内存之中。若有函数max(),设...
  • //用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数#include int max(int x,int y){return (x>y)?x:y;}int min(int x,int y){return (x>y)?y:x;}int main(){int (*p)...
  • 一定要学会指针变量指向函数的格式应该如何编写~
  • 指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内浅显的例子就不举了,这里举几个比较隐蔽的例子. 1.1结构体成员指针未初始化 struct stude ... C语言中结构体变量之间...
  • void sub ( int ( *x1) (int), int (*x2) (int,int) )  {  int a,b,i,j;... 在函数首部定义x1、x2为函数指针变量,x1指向的函数有一个整形形参,x2指向的函数有两个形参。i 和 j 是函数f1 和 f2所要的参数.
  • 指针函数变量指针的区别:1、指针函数是指带指针变量,即本质是一个函数函数返回类别是某一类型的指针类型标识符 *函数名(参数表)int *f(x,y);空语句和复合语句27413.3.2控制语句2751...
  • 一般形式:类型名 (*指针变量名)(函数参数表列)例如:int (*p)(int int)定义p是一个指向函数的指针变量,它可以指向函数的类型为整型且与两个整型参数的函数。p的类型用int(*)(int,int)表示。2.函数指针变...
  • 函数指针,即:通过指针变量引用函数(拿到函数在内存中的起始地址,也即:函数执行的入口地址),通过函数指针不仅可以实现函数的间接调用;而且,将函数指针作为函数参数进行传递,还可以实现C语言下-相对于同一个...
  • 在之前的讲习中我们学习了C语言中的指针变量以及函数参数的概念和作用,在实际的编程操作中往往会用到将指针变量作为函数参数的情况,那么究竟怎样把指针变量作为函数参数呢?下面课课家笔者就为大家讲解如何将指针...
  • 2.为什么要用指针变量作为函数参数呢? [call by value传参模式举例] [call by reference传参模式举例] 打个比方, call by value传参模式好比我们把电脑中的某份文件复制一份后发给别人, 无论别人怎么修改...
  • 我看傻了,所以整理一下。 指针函数 类型标识符* 函数名(参数表); 举例:int* fx(int x,int y); 解释: 第一ta是个函数 第二指针函数的返回的是地址,ps这边没读懂?来看一个例子。
  • 函数的定义中,函数的参数可以是各种变量,就包括指针变量。首先,我们来看看一个函数的定义: void func(char* p); 该函数的名称叫做func,参数定义为 char* p是个一级指针变量;那么,对该函数有如下调用: ...
  • 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数...
  • 指针变量作为函数参数指针变量作为函数参数 指针变量作为函数参数 函数的参数可以是指针类型。他的作用是将一个变量的地址传送到另一个函数中。 形式:只需要形式参数名前加上一个*即可。 说明:形参得到实参的值(一...
  • 函数指针的定义方法:1....直接定义函数指针变量#include#include#include"config.h"void func(){printf("hello world\n");}//方法1void test01(){/*int arr[5];int(ARRAY)[5];//定义数组类型int(*ARRA...
  • #includevoidswap(int*p,int*p2);/*propotypesdeclaration*/voidmain(){inta1,a2,*ptr1,*ptr2;printf("Entertwointeger(separatebycommas):\n");scanf("%d,%d",&a1,&a2);/*entera1anda...
  • 指针变量函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。 像数组、字符串、动态分配的内存等都是一系列数据的集合,没有办法...
  • 函数指针(Function Pointer)就是指向函数的指针变量。 定义函数指针的基本格式为:数据类型 (*指针变量名) (形参列表);*数据类型表示这个指针变量所指向的函数的返回值的类型,形参列表表示这个指针变量所指向的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 795,233
精华内容 318,093
关键字:

函数指针变量