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

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

时间2025-07-31 14:07:03分类IT科技浏览7870
导读:今天在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
SEO优化排名技巧重点详解(让你的网站排名飞升) 如何鉴别网站是否被K站(掌握这些技巧,让您的网站永远不被封禁)