C++中的数组和指针

C++中的数组和指针
 
先看两个定义(声明)
int* aryp[10];
int (*pary)[10];
 
aryp 是一个10个元素的数组,数组中元素类型为int*
pary 是一个指针,是指向数组的指针,这个被指的数组的类型为 int[10]
这样看pary的定义会clear一点
 
typdef int INT_ARY_TEN[10];
INT_ARY_TEN* pary;
 
C++是一种强类型(strong typed)语言,C++中有一组特殊的type:数组
数组的类型不单只跟元素的类型相关,还与元素的个数相关。
int aten[10];
int anine[9];
 
则 aten 的type 和 anine 的type 是不一样的,
aten的类型为 int[10], anine的类型为 int[9],而不是通常认为的int* const,
尽管我们确实可以把它当作int* const 用。这点跟Java不一样,在Java中他们两的类型都是Array
 
数组类型还有一个特殊之处,他们不能作为函数的参数和返回值类型
void foo(int arg[10]) {
}
arg的类型其实是int* const,跟那个10一点关系也没有,甚至[]里不写任何东西都没有关系。
这也是为什么有人说数组名就是常量指针的原因。
 
除了函数,数组还不能作为typeid的参数
typeid(aten).name() 是会返回 "int*" 的
正是因为这个原因
typeid(aten) == typeid(anine) 会返回true
aten, anine在传进去的时候,类型都变成 int* const了 (typeid不记录常量信息,所以cosnt去掉了)
 
既然数组也是一种类型,则由*操作符就可以定义另外一种类型:指向数组的指针,例如开始的那个pary,可以这样定义
 
int (*pary)[10] = &aten;
int (*pary)[10] = &anine; 是不合法的。
编译器抱怨说:cannot convert from 'int (*)[9]' to 'int (*)[10]'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值