C语言基础之指针进阶

来源:互联网 发布:如何搜索二次元软件 编辑:程序博客网 时间:2024/05/16 06:30

1,数组指针与指针数组

数组指针

数组指针实质上还是指针,不同之处在于它是指向数组的,多用于二维数组
如下例,int (p) [3]就是一个数组指针,可以指向第二维维度为3的二维数组,并给出了两种同样功能的初始化方式;p++后,则由arr[0]变为指向arr[1];同时,二维数组解引用时需要 ’ * * ’

#include <stdio.h>int main(){    int arr[2][3] = {{1,3,5},{2,4,6}};      //  int (*p)[3] = &arr[0];    int (*p)[3];    p = arr;    printf("*p = %d.\n",*(*p));    p++;    printf("*p = %d.\n",**p);    return 0;}

指针数组

指针数组,比如int *p [3] 实质上就是定义了三个指针,分别为p[0],p[1],p[2],可以将它们拿来单独使用
如下例:

#include <stdio.h>int main(){    int i=0;    int arr[3]= {1,3,5};            int *p[3] ;    p[1] = &arr[0];    p[2] = &arr[1];    p[3] = &arr[2];    for (i=1; i<4; i++)    printf("p[%d] = %d\n",i,*p[i]);    return 0;}

指针函数与函数指针

指针函数

本质是一个函数,它的返回值类型是一个指针

如下例:

#include <stdio.h>int* fun(int *a){    return a;}int main(void){    int a = 3;    printf("%d", *(fun(&a)));    return 0;}

函数指针

本质是一个指针,这个指针指向的是一个函数

#include <stdio.h>//比较两个数的大小 int func (int a,int b){    if (a<b)    return b;    else    return a;}int main (void){    int (*p)(int,int); //定义了一个函数指针     p = &func; //指向函数     int a;    a = (*p)(2,8); //调用函数     printf("较大的数是 %d\n",a);    return 0;}

其中,定义函数指针时,要注意类型与函数的类型一定要匹配,比如上例,函数是int func (int a,int b),其中,func是函数名,int (int a,int b)是函数的类型名;所以定义指向它的指针时,类型名要一致,也是int (int a,int b),(*p)将p定义为一个指针,根据C语法规则,写为int ( *p) (int a,int b),其中,a,b为形参,不写也可以。