C语言指针(一)

一、二级指针

(1)基本解释

int i = 1;
int *p1 = &i;
int **p2 = &p1;
  • 1、int ** p2 可以把它分为两部分看,即int *( * p2)
  • 2、后面 ( * p2) 中的“ * ”表示是一个指针变量
  • 3、前面的 int * 表示指针变量 ( * p2) 只能存放int*类型变量的地址
  • 4、p2 = &p1; *p2 = &i ; ** p2 = i;

在这里插入图片描述

(2)程序代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i = 1;
    int *p1 = &i;
    int **p2;
    int **p3;

    p2 = &p1; //二级指针要的是一级指针的地址,也可以开始赋值: int **p2=&p1;
    *p3 = &i;

    //地址相等: &i = p1 = *p2 
    printf("&i = %p\n", &i);
    printf("p1 = %p\n", p1);
    printf("*p2 = %p\n", *p2); 
    printf("*p3 = %p\n", *p3); 
    printf("\n"); 

    printf("&p1 = %p\n", &p1);   
    printf("p2 = %p\n", p2); 
    printf("\n");    

    printf("i = %d\n", i);
    printf("*p1 = %d\n", *p1);
    printf("**p2 = %d\n", **p2);
    printf("**p3 = %d\n", **p3);

    exit(0);
}

(3)输出结果
输出结果

二、二级指针的优点

  • 二级指针不仅可以将外部参数传递到函数内部,而且可以将函数内部变量带出到函数外部
#include <stdio.h>
#include <stdlib.h>

void numptr(int **ptr)
{
    static int num = 23;

    *ptr = &num;
}

int main(void)
{
    int *apple = NULL;
    int *banana = NULL;

    numptr(&apple);

    printf("*****frist*****\n");
    printf("apple: %d\n", *apple);

    *apple = 100;

    numptr(&banana);

    printf("*****second*****\n");
    printf("apple: %d\n", *apple);
    printf("banana: %d\n", *banana);

    exit(0);
}

输出结果:

xxx@xxx-virtual-machine:~/linux/linux_c/600CymTest$ ./503ptr2 
*****frist*****
apple: 23
*****second*****
apple: 100
banana: 100

三、补充

  • 1、一级指针 ———————> 变量取地址
  • 2、二级指针 ———————> 一级指针的地址
  • 3、三级指针 ———————> 二级指针的地址
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值