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

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

时间2025-06-20 23:57:36分类IT科技浏览7509
导读:今天在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
css选择器主要包括(CSS选择器分类大全)