首页IT科技C语言指针转置m×n(C语言学习趣事_关于指针转换)

C语言指针转置m×n(C语言学习趣事_关于指针转换)

时间2025-05-01 19:03:11分类IT科技浏览6925
导读:今天在Gmail的群组讨论贴中看到这样一个帖子: [learn-linux-c-cpp] 一维数组转成指向数组的指针 收件箱...

今天在Gmail的群组讨论贴中看到这样一个帖子:

[learn-linux-c-cpp] 一维数组转成指向数组的指针 收件箱 x zhangzhe benzhemin@gmail.com 11-10-28 发送至 learning-linux. 还请大家讨论一下: 代码: #include <stdio.h> int main(void){ int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int (*p)[2] = (int (*)[2])a; printf("%d\n", **p); printf("%d\n", **(p+1)); printf("%d\n", *a); return 0; } a只是一个指针            ,为何转成int (*)[2]之后转成了二维指针? 事实上下面代码也可以编译运行通过            。 #include <stdio.h> int main(void){ int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int (*p)[2] = (int (*)[2])&a; printf("%d\n", **p); printf("%d\n", **(p+1)); printf("%d\n", *a); return 0; } 难倒 int (*p)[2] = (int (*)[2])a; 和 int (*p)[2] = (int (*)[2])&a;两种转换是等价的吗                   。

   这里明显可以看到这位网友对概念的混淆                  ,如下的描述      。

a只是一个指针       ,为何转成int (*)[2]之后转成了二维指针?

我们知道在C语言中      ,数组名是一个常量                  ,就是常说的const量             ,经过上面的变化      ,a并没有变成int (*)[2]这样的指针类型                  ,它还是保持

原来的属性;只不过是p是int (*)[2]这样的一个指针类型             ,并且被用户强制指向了a这个地址            。这就是说如果用指针p访问的话,那么可以将a地址开始的

10个整数解释成二维数组                   。

还有就是下面的这个描述:

难倒 int (*p)[2] = (int (*)[2])a; 和 int (*p)[2] = (int (*)[2])&a;两种转换是等价的吗      。

上面的这两个描述是一致的                  , 因为在解析的时候: a 和 &a 的实质是一样的                   ,都是指向内存中固定的区域;因此两种转换是等价的      。

这里不多说了,欢迎园子里的大侠们            ,对这个问题进行讨论                   。

以上只是我个人的观点                   ,如有不当       ,请大家拍砖.........................

声明:本站所有文章            ,如无特殊说明或标注                  ,均为本站原创发布            。任何个人或组织       ,在未征得本站同意时      ,禁止复制            、盗用                   、采集      、发布本站内容到任何网站            、书籍等各类媒体平台      。如若本站内容侵犯了原著者的合法权益                  ,可联系我们进行处理                   。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
怎么进行win7在线重装系统设置密码(怎么进行win7在线重装系统?) win7重装系统的软件有哪些(重装系统win7下载的方法是什么?)