免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: unistd
打印 上一主题 下一主题

严重声明:C语言中不存在数组的类型!它仅仅是一个概念! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-12-19 20:38 |只看该作者

  1. int foo(int a[100]);
复制代码

论坛徽章:
0
12 [报告]
发表于 2009-12-19 20:41 |只看该作者

又是不同角度的概念之争.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
13 [报告]
发表于 2009-12-19 20:42 |只看该作者
原帖由 unistd 于 2009-12-19 20:34 发表


把字符串数组sizeof之后得到字符串的大小,只能说是C语言的一个特殊规定而已,我要是设计C语言的话,就不会做这个特殊规定,所有指针,一律返回该平台地址空间的字节大小



你要能回答我一个问题

struct A
{
    int b;
    int a[100];
    int c;
}

sizeof(A) 和 sizeof(a) 如何达到和谐?

论坛徽章:
0
14 [报告]
发表于 2009-12-19 20:45 |只看该作者

lz的"C语言中不存在数组的类型"这句话,如果不结合lz的全文,很容易被大家误解lz要表达的意思!单就这句话而言,很容易举出反证的.

论坛徽章:
0
15 [报告]
发表于 2009-12-19 20:45 |只看该作者
原帖由 unistd 于 2009-12-19 20:34 发表


把字符串数组sizeof之后得到字符串的大小,只能说是C语言的一个特殊规定而已,我要是设计C语言的话,就不会做这个特殊规定,所有指针,一律返回该平台地址空间的字节大小

int a[100];
int *a;
也是一样。。

[ 本帖最后由 gtkmm 于 2009-12-19 20:47 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
16 [报告]
发表于 2009-12-19 20:47 |只看该作者
这就是 C 程序员的现状。
C 程序员过于执迷细节,注重实践,但是对概念的辨析确实要差一些。

类型是什么?
数组又是什么?
别动不动就是“其实”、“本质上”、“只不过是”、“仅仅是”,
概念就是用来帮助理解表达思想的。
正确使用行业通用的有明确含义的名词和术语,是一个人职业素养的体现。

有关 C 是不是有数组类型,完全可以看 C 的标准条文,看看上面是不是提到了。

论坛徽章:
0
17 [报告]
发表于 2009-12-19 20:48 |只看该作者
从来分不清指针和数组还有字符串的飘过
实话,我没分清过,也没用错过。
中国人英语语法真好,可是能交流的不多,莎士比亚的语法错误都有人捧。

论坛徽章:
0
18 [报告]
发表于 2009-12-19 20:55 |只看该作者
原帖由 flw 于 2009-12-19 20:47 发表
概念就是用来帮助理解表达思想的。



说的非常对.

论坛徽章:
0
19 [报告]
发表于 2009-12-19 20:56 |只看该作者
原帖由 prolj 于 2009-12-19 20:48 发表
从来分不清指针和数组还有字符串的飘过
实话,我没分清过,也没用错过。


牛人.

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
20 [报告]
发表于 2009-12-19 21:21 |只看该作者

回复 #1 unistd 的帖子

结果你潜心专研的C语言, 也学的不咋嘀……

数组名和指针就是两回事。
通过数组名和指针访问数组元素, 前者比后者少一次访问。 指针多出的那一次操作, 并不是所有情况都能被优化掉。
一个简单的例子, 将一个符号定义为数组, 并在另一个翻译单元中声明为指针; 或者相反; 你看看会不会出问题吧。

数组名可以认为不占有空间, 也可以认为占有整个数组的空间。
数组名代表的是这个空间的起始地址。

指针变量占有空间。 指针代表的就是该变量所占空间的地址。
通过指针访问要先从指针变量的空间中得到数组的地址 —— 就是多这么一次访问 —— 然后再按数组方式访问。

数组名退化, 就是将数组的地址, 存放到一个指针变量中。 通过退化的数组访问, 依然会产生那一次获得地址的操作。
而且不再含有数组的类型信息。所以sizeof(a) 和 sizeof(ptr) 是不同的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP