数组和指针的类型转换

每次遇到这一块都容易糊涂。于是再澄清一下:
int **m;//m是二级指针
int (*n)[5];//n是数组指针,是指向int [5]的指针,和函数指针写法类似
int *o[3];//o是包含3个int指针的数组
int *p[5];//p是包含5个int指针的数组
int q[3][5];//3行5列的二维数组
 
 
指针的赋值操作
    m=n;//错误; int **m; int (*n)[5];
    m是指向int *的指针,而n是指向int [5]的指针,类型不同,n是20个字节的类型,而m是4个字节的。
    在VC里面这两个类型属于不同的类型。所以不能进行类型转换,但是在gcc下是可以进行转换的,但是会
    给出警告。这样转化是不安全的。测试了一下,发现m+1前进了4个字节,而n+1则前进了20个字节,所以
    如果转换了之后就可能导致莫名奇妙的错误。当然也不是不可能转化的,在vc下你可以这样子转化。
    m=reinterpret_cast<int**>(n);
    使用其他的转化方式都不能完成转化。
 
    m=o;//正确; int **m; int *o[3]; m+1前进4字节,o+1前进4字节,可相互转化
    m=p;//正确; int **m; int *p[5]; m+1前进4字节,o+1前进4字节,可相互转化
 
    n=q;//正确; q[3][5] q+1前进20个字节,故和n一致
   
    m=q;//错误; m+1前进4字节,q+1前进20个字节
 
下面来自我QQ空间的以前的帖子,是有关这个问题的实例,读者有兴趣可以分析一下
有关数组和指针的可参见
《c专家编程》里面讲得很详细
 
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(916) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值