指向数组指针的数组

实现一个程序时,想要写出“指向数组指针的数组”的声明。完整地说,我想声明一个3元素数组,元素类型为“指向char[64]的指针”。


为什么想指定数组维度?比如arr是这个指针数组,如果能声明维度,*arr[0]的类型就是“char[64]”,sizeof(*arr[0])就能获得数组的长度。


一下还写不出来,尝试几番,总算让sizeof(*arr[0])返回64了。声明的样子是:


char (*arr[3])[64]


以前以为看完C语言专家编程关于声明的那些内容,就不会被类似问题难住。其实,还是很少自主去思考这些东西。这个声明的意思是,arr是个3元素数组,元素类型是指针,指针类型是char[64]。即指向char[64]指针的数组。


如果不要括号就成了,arr是个3元素数组,元素类型是64元素数组,此64元素数组里的元素类型是指针,指针指向的类型是char。


不同之处是,3元素数组里元素类型改变了。声明里[]比*的优先级高,不括起来的话,元素类型就是[]而不是*了。


如果改变一下括号:


char (*arr)[3][64]就成了,素数arr是一个指针,指针指向的类型是某个3元组,3元素数组之元素类型为某64元素数组,64元素数组之元素类型为char。


三种情况依次是,“指向数组指针”的数组,“char*指针数组”的数组,指向“char数组的数组”的指针。


声明倒是做出来了,结果用的时候警告不断:大部分函数都是要char*,而传入的是char(*)[64]。


C语言的类型系统果然蛋疼。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值