c语言中(*a)[n]与*a[n]有什么区别

c语言中(*a)[n]与*a[n]有什么区别

表面上看这些问题,好像是指针,但是,如何来正确判断这几个定义,需要我们首先有运算符优先级的概念。

在c语言中,[] 和 () 的优先级比星号(星号的名字叫做“指针运算符”)要高,所以,在这几个声明中,先看 [] 和 () 。
同时,这两个括号的运算符的结合顺序,是从左到右的。因此,int *a[n],实际上相当与int *(a[n]),也就是(int *)(a[n])。

让我们来逐步分析:

ElementType *a[n] :

(int *)(a[n]) 首先是一个数组(比如,把 int * 换为 int,就是“元素是整形数据的数组”。那么,换为 int*,就是“元素是指向整形数据的数组的指针”简而言之就是 指向数组的指针 )。

ElementType(*a)[n] (记忆法-括2维):

int (*a)[n] 改变了自然的运算符的优先级,相当于(int)((*a)[n])。一有指针就头疼,我们把指针先用b替换掉,就是int b[n],是一个n位数组,数组首地址(也就是数组名)是b。
那么,int (*a)[n]也是一个n位数组,但是这个数组的首地址是*a(这里的*是间指运算符),也就是说,*a的内容,是一个数组的首地址。
那么,a的内容是一个存放数组首地址的地址,这个数组中的元素都是int。实际上,a相当于是一个二维指针

  • 20
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值