标题:[原创]C迷你问题:什么指针没有类型?(不含void 型)
只看楼主
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 

好象俺今天话多了,唉,酒能乱性啊,同志们,少喝为妙


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

2006-07-14 15:52
grub2linux
Rank: 1
等 级:新手上路
帖 子:335
专家分:0
注 册:2004-12-25
得分:0 
以下是引用baidu在2006-7-14 15:32:45的发言:
同理

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

大斑竹啊:
我前面也说了,你这里的 int (*p) 中的括号不是公式,而是可选加上去的括号。(C中,在很多地方是可以加上括号的,尽管,有时有意加上多余的括号。但编译器只解释为 int *p 公式)
在 int (*p)[n]和 int (*p)() 中的()是一定要加的。。



有缘相识!我中文系的 3月拿下C/C++/VC 5天写游戏 2月写游戏系统 有空去http://mykool.go2.
2006-07-14 15:53
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-14 15:55
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 
以下是引用grub2linux在2006-7-14 15:53:20的发言:

大斑竹啊:
我前面也说了,你这里的 int (*p) 中的括号不是公式,而是可选加上去的括号。(C中,在很多地方是可以加上括号的,尽管,有时有意加上多余的括号。但编译器只解释为 int *p 公式)
在 int (*p)[n]和 int (*p)() 中的()是一定要加的。。


你怎么这么认死理啊?

int (*p);与int * p;是同一东西,有个叫优先级的东东你知道不知道?


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

我觉得其他方面我不敢说(刚才想到,比如函数类型,函数的参数等等。。)
但是我下面的例子:道理是没错的吧
char str[128]={..};
char *p1=str;
int in[128]={...};
int *p2=in;
void *p=p1; // 显得多余 (这里我漏掉了,应该是void *p=(void *)p1;) 严重的概念错误
p2=p1; // 这里应该是 p2=(int *)p1

可以直接:
p2=(int *)p1;

[此贴子已经被作者于2006-7-14 16:08:24编辑过]


有缘相识!我中文系的 3月拿下C/C++/VC 5天写游戏 2月写游戏系统 有空去http://mykool.go2.
2006-07-14 16:00
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-14 16:04
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 
int *p;

*修饰p,P是个指针。
int 修饰(*p),说明P指向的数据类型是int,P的值是int数据的地址。(这也是我举上面的例子的初衷)
而不是int *修饰p.

int (*p)();

*修饰p,P是个指针。
int ()修饰(*p),说明P指向一个返回值是int,无参数的函数。P的值就是该函数的入口地址。

所以,如果函数指针是无类型的话,那么,什么指针又是有类型的?

[此贴子已经被作者于2006-7-14 16:28:09编辑过]


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-07-14 16:11
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 

上面的话有些勉强,只是想与你的论点形成一个鲜明的对比,不一定正确


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

TO BAIDU 大斑竹:
你的 有关 int (*p) 例 是不是 用来 用归谬法 来驳斥我的有关 int (*p)()<指向函数的指针>?
我理解,应该是这个意图吧?

但是,你的这个例证,应该是一种偷换概念吧?
因为,这里 int (*p) 只是其形,实质却是 int *p (编译器所最终解释为的)
所以,应该归谬无效啦。。

《测试了几遍了》
比如TC类,
你这样是非法的:
char ch[2][3]={'a','b','c','d','e','f'};
char *p=ch; //会警告
规范的是:char *p=ch[0];

这里,想再重复一下我的帖子的主题:
没有类型的指针可能是指向函数的指针:
int (*p)() // 这里 穆扬说应该是 int (*p)(char 等等)。这个应该都是可以的,正如在申明函数时
既可 int func(int) 也可 int func(int a) .
P前面的*号,是他唯一的标记,前面的 INT 当然不是指针的而是其指向的函数的返回类型。

如有看法意见,当然提出来一起互相讨论学习,尽力追求到接近真实的道理吧。。

TO 穆扬:
你的对VOID *的意见使我纠正了对VOID *的有些部分的仓促的观点

问题,经过互相讨论甚至论辩,才有提高的。。。


有缘相识!我中文系的 3月拿下C/C++/VC 5天写游戏 2月写游戏系统 有空去http://mykool.go2.
2006-07-14 16:32



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




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

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