c语言函数传递二重指针,C语言指针用法详解 (三) 二重指针(示例代码)

二重指针

例子1:

Question

int **ptr1 = NULL;

cout<

cout<

cout<

/// 输出 :0 非法 非法

Reason:

1) 三省指针: 指针 ptr1  的类型是 int ** ,指向的类型 int*,  指定为空

2) *ptr1 是 ptr 指向的指向 ,即空的指向,非法

3) **ptr1 是 ptr 指向的指向的指向 ,即空的指向的指向,非法

例子2:

Question

int * p1 = (int * )malloc(sizeof(int));

int **ptr2 = &p1;

cout<

cout<

cout<

Practice:

#include

using namespace std;

int main()

{

int * p1 = (int * )malloc(sizeof(int));

int **ptr2 = &p1;

cout<

cout<

cout<

cout<

cout<

cout<

}

65a65ea6c29323c136f6e48bc602f5c7.png

Reason:

3c576eb4459665e1168d12075b3a25fe.png

1)三省指针:指针 p  的类型是 int * ,指向的类型 int,  初始化为没有指定其指向

2)三省指针: 指针 ptr2  的类型是 int ** ,指向的类型 int*,  指针p的地址  (注意此时 ptr2 与 &p 类型相同 都是  int** ,才可以赋值)

3)*ptr2 是 ptr2 指向 ,即&p1的指向,为p1

4)**ptr2 是 ptr2 指向的指向 ,即*ptr2的指向,为*p1

5)指针即是地址,所以   看作 &p1 指向 p1

例子3:

Question

int * p2 = (int * )malloc(sizeof(int));

int num = 6;

p2 = #

int **ptr3 = &p2;

Practice:

#include

using namespace std;

int main()

{

int * p2 = (int * )malloc(sizeof(int));

int num = 6;

cout<

p2 = #

int **ptr3 = &p2;

cout<

cout<

cout<

cout<

cout<

cout<

cout<

}

56d3581fee7f80416f5c6e5dcefef14c.png

Reason:

f8854885428e8dca377d3bc1356a3efb.png

1)三省指针:指针 p2  的类型是 int * ,指向的类型 int,  初始化 没有指向,后指向为&num(注意此时 p2 与 &num 类型相同 都是  int* ,才可以赋值)

2)三省指针: 指针 ptr3  的类型是 int ** ,指向的类型 int*,  指针p2的地址  (注意此时 ptr2 与 &p2 类型相同 都是  int** ,才可以赋值)

3)*ptr3 是 ptr3 指向 ,即&p2的指向,为p2

4)**ptr3 是 ptr3 指向的指向 ,即*ptr3的指向,为*p2

5)指针即是地址,所以   看作 &num 指向 num,看作 &p2 指向 p2

吐吐吐吐吐吐吐槽:写博客好累啊啊啊啊啊,博客园为啥这么不好用,是我打开的方式不对吗????

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值