当前位置: 代码迷 >> C语言 >> [原创]C迷你问题:什么指针没有类型?(不含void 型)
  详细解决方案

[原创]C迷你问题:什么指针没有类型?(不含void 型)

热度:120   发布时间:2006-07-14 15:29:42.0
[QUOTE]实际上,不存在指向数组的指针,只存在指向数组第一个元素的指针。[/QUOTE]这个认识也是错的

----------------解决方案--------------------------------------------------------
你能不能说说理由呢?
我上面是说了根据的啊
根据:
在有些严格的编译器,比如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编辑过]


----------------解决方案--------------------------------------------------------
[QUOTE]int (*p)();
p=func;
这种情况,C语言并没有给他加上什么帽子,就是没有给他什么类型了。看他前面就是一个*号,
前面的int 可不是他的类型,而是函数的类型。[/QUOTE]

同理

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


----------------解决方案--------------------------------------------------------
以下是引用grub2linux在2006-7-14 15:31:07的发言:
你能不能说说理由呢?
我上面是说了根据的啊

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


----------------解决方案--------------------------------------------------------

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

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


----------------解决方案--------------------------------------------------------
以下是引用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


----------------解决方案--------------------------------------------------------
TO baidu 大斑竹:
你怎么把 我说的 int (*p)() 说成 int (*p) 了?
这是两回事啊!




----------------解决方案--------------------------------------------------------
以下是引用grub2linux在2006-7-14 15:42:06的发言:

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

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

你测试过了?


----------------解决方案--------------------------------------------------------
以下是引用grub2linux在2006-7-14 15:44:24的发言:
TO baidu 大斑竹:
你怎么把 我说的 int (*p)() 说成 int (*p) 了?
这是两回事啊!



看清楚我要表达的意思


----------------解决方案--------------------------------------------------------
  相关解决方案