数组和指针的类型转换

来源:互联网 发布:comsol正规软件多少钱 编辑:程序博客网 时间:2024/06/04 22:07
每次遇到这一块都容易糊涂。于是再澄清一下:
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空间的以前的帖子,是有关这个问题的实例,读者有兴趣可以分析一下
http://user.qzone.qq.com/372895101/blog/1204481560
有关数组和指针的可参见
《c专家编程》里面讲得很详细
 
阅读(916) | 评论(0) | 转发(0) |
0

上一篇:磁盘空间不足--增加虚拟磁盘

下一篇:数组和指针并不相同

相关热门文章
  • 文件名大小写转换的shell脚本...
  • 教你多少招不花钱做网店推广的...
  • CubieBoard: 修改fex文件
  • java之路,基础知识5
  • C++函数中那些不可以被声明为...
  • test123
  • 编写安全代码——小心有符号数...
  • 使用openssl api进行加密解密...
  • 一段自己打印自己的c程序...
  • sql relay的c++接口
  • ChinaUnix & ITPUB社区12周年...
  • ssh连接出现以下提示,求解...
  • 如何扩展MYSQL
  • 准备做一个大型门户,用户什么...
  • gbk or utf8
给主人留下些什么吧!~~
原创粉丝点击