标题:[原创]C迷你问题:什么指针没有类型?(不含void 型)
只看楼主
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 
[QUOTE]实际上,不存在指向数组的指针,只存在指向数组第一个元素的指针。[/QUOTE]这个认识也是错的

偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-07-14 15:29
grub2linux
Rank: 1
等 级:新手上路
帖 子:335
专家分:0
注 册:2004-12-25
得分:0 
你能不能说说理由呢?
我上面是说了根据的啊
根据:
在有些严格的编译器,比如TC类,
你这样是非法的:
char ch[2][3]={'a','b','c','d','e','f'};
char *p=ch; //会警告 如果指针能指向数组,这里就不会警告。之所以有很多人误以为可以指向数组。主要是因为有些编译器(比如,VC等)不严格,或者说自动帮你转换成了指向相应的第一元素了。。可以多试试一些编译器,就会得到验证。
规范的是:char *p=ch[0];

[此贴子已经被作者于2006-7-14 15:36:40编辑过]


有缘相识!我中文系的 3月拿下C/C++/VC 5天写游戏 2月写游戏系统 有空去http://mykool.go2.
2006-07-14 15:31
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 
[QUOTE]int (*p)();
p=func;
这种情况,C语言并没有给他加上什么帽子,就是没有给他什么类型了。看他前面就是一个*号,
前面的int 可不是他的类型,而是函数的类型。[/QUOTE]

同理

int (*p);
C语言并没有给他加上什么帽子,就是没有给他什么类型了。看他前面就是一个*号,
前面的int 可不是他的类型,而是数据的类型


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-07-14 15:32
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 
以下是引用grub2linux在2006-7-14 15:31:07的发言:
你能不能说说理由呢?
我上面是说了根据的啊

int a[3][5]={...};
int (*p)[5]=a;


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-07-14 15:36
grub2linux
Rank: 1
等 级:新手上路
帖 子:335
专家分:0
注 册:2004-12-25
得分:0 

int a[3][5]={...};
int (*p)[5]=a;
这在TC系列中是会警告的: suspicios pointer conversion 可疑的指针转换

在VC等不严格遵守C规范的编译器就没警告。。


有缘相识!我中文系的 3月拿下C/C++/VC 5天写游戏 2月写游戏系统 有空去http://mykool.go2.
2006-07-14 15:42
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 
以下是引用grub2linux在2006-7-14 15:31:07的发言:
你能不能说说理由呢?
我上面是说了根据的啊
根据:
在有些严格的编译器,比如TC类,
你这样是非法的:
char ch[2][3]={'a','b','c','d','e','f'};
char *p=ch; //会警告 如果指针能指向数组,这里就不会警告。之所以有很多人误以为可以指向数组。主要是因为有些编译器(比如,VC等)不严格,或者说自动帮你转换成了指向相应的第一元素了。。可以多试试一些编译器,就会得到验证。
规范的是:char *p=ch[0];

再更正一点,TC比VC宽松,我是第一次听说TC比VC严格
TC用的是C89标准,VC应该是用C99吧?估计是,我用BCB不用VC


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-07-14 15:43
grub2linux
Rank: 1
等 级:新手上路
帖 子:335
专家分:0
注 册:2004-12-25
得分:0 
TO baidu 大斑竹:
你怎么把 我说的 int (*p)() 说成 int (*p) 了?
这是两回事啊!




有缘相识!我中文系的 3月拿下C/C++/VC 5天写游戏 2月写游戏系统 有空去http://mykool.go2.
2006-07-14 15:44
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 
以下是引用grub2linux在2006-7-14 15:42:06的发言:

int a[3][5]={...};
int (*p)[5]=a;
这在TC系列中是会警告的: suspicios pointer conversion 可疑的指针转换

在VC等不严格遵守C规范的编译器就没警告。。

你测试过了?


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-07-14 15:44
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 
以下是引用grub2linux在2006-7-14 15:44:24的发言:
TO baidu 大斑竹:
你怎么把 我说的 int (*p)() 说成 int (*p) 了?
这是两回事啊!



看清楚我要表达的意思


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-07-14 15:45
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-14 15:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-78155-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048134 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved