C语言笔记15--二级指针

二级指针储存一级指针的地址,二级指针可以修改一级指针指向的内容,两者就像是上下级的关系。指针的有着多种变化,在数组、函数中都有着巨大的作用。
二级指针最大的特点就是有两个**,定义一个二级指针:int **p;
1.二级指针改变变量的值

#include<stdio.h>
#include<stdlib.h>
void main()
{
    int a=10;
    int *p=&a;
    int **pp=&p;//二级指针有两个**
    printf("a=%d\n",a);
    **pp=20;//二级指针直接修改一级指针指向的值
    printf("a=%d\n",a);
    printf("a=%d\n",*p);
    system("pause");
}

这里写图片描述
由结果可以知道,即使一级指针p没有进行修改变量的值,只要二级指针修改了,变量的值也会发生改变。
2.改变一级指针指向的地址

#include<stdio.h>
#include<stdlib.h>
void main()
{
    int a=10;
    int b=20;
    int *p=&a;
    int **pp=&p;//二级指针有两个**
    printf("*p=%d\n",*p);
    *pp=&b;//修改一级指向的地址
    printf("*p=%d\n",*p);
    system("pause");
}

这里写图片描述
二级指针改变了一级指针指向的地址。
3.二级指针遍历指针数组

#include<stdio.h>
#include<stdlib.h>
void main()
{
    char *a[] = { "lwj", "jib", "hehe", "jiuzhe", "ffff" };
    int len=(sizeof(a)/sizeof(char *));//求数组长度
    for(char **p=a;p<a+len;p++)//a为指针,需要二级指针遍历
    {
        printf("%s\n",p);
    }
    system("pause");
}

这里写图片描述
4.二级函数指针改变一级函数指针
函数定义:int add();
函数指针定义:int (*p)();//把函数名去掉,再把指针名填上。
下面写一个用二级函数指针改变一级函数指针指向的函数。开始一级函数指针先指向加函数,用二级函数指针让一级函数指针指向减函数。

#include<stdio.h>
#include<stdlib.h>
int add(int a,int b)//加函数
{
    return a+b;
}
int sub(int a,int b)//减函数
{
    return a-b;
}
//改变函数指针指向的函数
void change_fun(int (**pp)(int,int))
{
    *pp=sub;//*pp就是一级函数指针指向的函数地址
}
void main()
{
    int a=20,b=10;
    int(*p)(int,int)=add;//函数名就是函数的地址
    printf("result=%d\n",p(a,b));//调用p指向的函数
    change_fun(&p);//传入函数指针的地址
    printf("result=%d\n",p(a,b));//调用p指向的函数
    system("pause");
}

这里写图片描述
使用指针最大的麻烦是指针的类型,类型不一致就会出先各种错误。当指针的级数越来越多,就会变得难以理解。

猜你喜欢

转载自blog.csdn.net/weixin_40850689/article/details/82726909
今日推荐