指针类型的确定

在定义指针的时候可能遇到层层嵌套的定义,有时候一眼看上去无法判断,可以根据以下步骤从内层一层一层进行判断:

1.首先找到定义的标识符(即变量名);

2.根据标识符左右两边的运算符的优先级和结合性进行一层一层的划分,用括弧标出来。*结合的第一个标识符决定了定义的指针总体类型。如int (*(p[n]))就是一个数组 int (*(p()))就是一个函数;

3.然后从第一层开始用手去掉最内层的*结合的第一个标识符(可能就是这个标识符,也可能由于标识符右侧出现优先级高于解引用运算符而是其他的一个整体)然后剩下的就是这个标识符的指针类型(即这个标识符内存储的就是余下部分的数据类型的地址)。

下面是一些常用的指针类型:

int *p 等价于 int (*p) 所以p是指向int类型的指针

int *p[n] 等价于 int (*(p[n])) 所以p[n]是指向int类型的指针,p是指向int类型的指针的数组(即这是一个存储int类型指针的数组)

int (*p)[n] 等价于 int ((*p)[n]) 所以p是指向 int [n]数据类型的指针,即存储的是一个一维数组的首地址

int *p()  等价于 int (*(p())) 所以p()的返回值是一个指向int类型的指针(即这是一个返回值为int类型指针的函数)

int (*p)() 等价于 int ((*p)()) 所以p是一个指向in ()t类型的指针,即存储的是一个返回值为int类型的函数的地址(即函数指针)

int **p 等价于 int (*(*p))  所以p是一个指向int *类型的指针,即是一个int类型指针的指针,存储的是一个int类型指针所在的地址。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值