欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言学习4-指针

程序员文章站 2024-01-03 11:11:52
...

指针

int a =10;
int *p = &a;  一级指针
int **s = &p; 二级指针
int (*p)[10]; 指向数组的指针
int  *(*s)[10]; 指针指向放指针的数组 这个数组有十个空间
int *p[10]; 开辟10个空间 每个空间放指针
例如:
int *br[10];
int *(*s)[10] = &br;

int ar[10];
int (*p)[10] = &ar;

例子:

    int ar[5][2] = { 1,2,3,4,5,6,7,8,9,10 };
    int(*p)[2] = &ar[1];
    int *s = (int*)ar[1];
    printf("%d %d/n", p[1][3], s[3]);
    return 0;

解题思路:
C语言学习4-指针所以:

p[1][3] 可以看做**(p+1+3),
s[3] 看作*(p+3

C语言学习4-指针

函数指针

C语言学习4-指针

int main()
{    
	int fun(int,int);    
	int(*pfun)(int,int);    
	return 0;
}

int(*p)(int, int);
这个语句就定义了一个指向函数的指针变量 p。首先它是一个指针变量,所以要有一个“*”,即(*p);
其次前面的 int 表示这个指针变量可以指向返回值类型为 int 型的函数;后面括号中的两个 int 表示这个指针变量可以指向有两个参数且都是 int 型的函数。所以合起来这个语句的意思就是:
定义了一个指针变量 p,该指针变量可以指向返回值类型为 int 型,且有两个整型参数的函数。p 的类型为 int(*)(int,int)。

函数指针的定义方式为

函数返回值类型 (* 指针变量名) (函数参数列表);

“函数返回值类型”表示该指针变量可以指向具有什么返回值类型的函数;
“函数参数列表”表示该指针变量可以指向具有什么参数列表的函数。这个参数列表中只需要写函数的参数类型即可。

需要注意的是:
1.指向函数的指针变量没有 ++ 和 – 运算。
2.也不能*引用

如何用函数指针调用函数

int Func(int x); /*声明一个函数*/
int (*p) (int x); /*定义一个函数指针*/
p = Func; /*将Func函数的首地址赋给指针变量p*/

赋值时函数 Func 不带括号,也不带参数。由于函数名 Func 代表函数的首地址,因此经过赋值以后,指针变量 p 就指向函数 Func() 代码的首地址了。

下面来写一个程序,看了这个程序你们就明白函数指针怎么使用了:

# include <stdio.h>
int Max(int, int);  //函数声明
int main(void)
{
    int(*p)(int, int);  //定义一个函数指针
    int a, b, c;
    p = Max;  //把函数Max赋给指针变量p, 使p指向Max函数
    printf("please enter a and b:");
    scanf("%d%d", &a, &b);
    c = (*p)(a, b);  //通过函数指针调用Max函数
    printf("a = %d\nb = %d\nmax = %d\n", a, b, c);
    return 0;
}
int Max(int x, int y)  //定义Max函数
{
    int z;
    if (x > y)
    {
        z = x;
    }
    else
    {
        z = y;
    }
    return z;
}

输出结果是:

please enter a and b:3 4
a = 3
b = 4
max = 4

PS:

int(*pfun[3])(int,int); 开辟三个空间,每个空间存储一个函数指针
int(*(*p)[3])(int,int); 指针指向了存放了函数指针的数组,这个数组大小为3

上一篇:

下一篇: