免费注册 查看新帖 |

Chinaunix

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

[C] C语言中有没有sizeof()==1的指针? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2005-02-17 16:37 |只看该作者

C语言中有没有sizeof()==1的指针?

[quote]原帖由 "nhw_cs"]最好不要对JohnBull老大轻易进行质疑,这么一个简单的问题(数组与指针的区别)难道他会不知道? 他的意思是说,除了这种似是而非的可能之外,根本就没有可能指针长度为1! JohnBull是这里最牛的人之一,经验老到,还有FH也很..........[/quote 发表:
bierdaci也是这里最牛的人之一……大家讨论问题,何必如何计较身份

论坛徽章:
0
22 [报告]
发表于 2005-02-17 17:01 |只看该作者

C语言中有没有sizeof()==1的指针?

[quote]原帖由 "albcamus"]ierdaci也是这里最牛的人之一……大家讨论问题,何必如何计较身份 [/quote 发表:


就是借机夸奖夸奖别人,没别的意思.其实啊,你也是很牛滴

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
23 [报告]
发表于 2005-02-17 21:45 |只看该作者

C语言中有没有sizeof()==1的指针?

俺们C版是养牛的地方。俺是小小放牛娃。

论坛徽章:
0
24 [报告]
发表于 2005-02-17 22:04 |只看该作者

C语言中有没有sizeof()==1的指针?

原帖由 "albcamus" 发表:
记得以前看Linux源代码分析,讲说void*和函数指针都是sizeof()==1的,其余的为4 。(IA32平台)可是刚刚写了小程序输出一下,都是4.

记不清楚了,就来问问朋友们吧


你记错了,说的因该是``该指针指向的对象大小强制为1'',也就是在进行指针增减运算时,与 char 指针享有相同的规则。


  1. #include <stdio.h>;

  2. int
  3. main ()
  4. {
  5.         int (*f)();
  6.         f=main;
  7.         printf ("%x %x\n", f, f+1);
  8.         printf ("%d\n", sizeof(*f));

  9.         return 0;
  10. }
复制代码

论坛徽章:
0
25 [报告]
发表于 2005-02-18 10:35 |只看该作者

C语言中有没有sizeof()==1的指针?

的确记错了,不是情景分析,是另一本书,《GCC技术参考大全》上说的。但是它的确讲错了,它说:
GCC对void指针和函数指针进行递加/递减运算的单位是1.这是因为void指针和函数指针的操作符的大小(sizeof)为1.

(第4.3.23节)
后一句明显讲错了。以前另开了一个帖子说的,估计斑竹没看到

论坛徽章:
0
26 [报告]
发表于 2005-02-18 11:38 |只看该作者

C语言中有没有sizeof()==1的指针?

sizeof(char)==1,sizeof不是函数是宏,两个概念

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
27 [报告]
发表于 2005-02-23 15:32 |只看该作者

C语言中有没有sizeof()==1的指针?

今天看gcc的文档,看到这个。

  1. 5.18 Arithmetic on void- and Function-Pointers
  2. In GNU C, addition and subtraction operations are supported on pointers to void and on pointers to functions. This is done by treating the size of a void or of a function as 1.

  3. A consequence of this is that sizeof is also allowed on void and on function types, and returns 1.

  4. The option -Wpointer-arith requests a warning if these extensions are used.
复制代码

论坛徽章:
0
28 [报告]
发表于 2005-02-23 15:48 |只看该作者

C语言中有没有sizeof()==1的指针?

多谢lenovo斑竹。看来这本书的意思就是从这里来的,我不懂emacs,所以info版的手册几乎不用

不过输出仍然矛盾。
sizeof(void *)和
void *p,sizeof(p)
的结果还是4。
手册的这句话“sizeof is also allowed on void and on function types, and returns 1. ”岂不也是错的了?会不会是手册没有及时更新?

论坛徽章:
0
29 [报告]
发表于 2005-02-23 15:51 |只看该作者

C语言中有没有sizeof()==1的指针?

[quote]原帖由 "JohnBull"][/quote 发表:


要分环境的哦


  1. int
  2. sizeof_test(char p[1])
  3. {
  4.    char s[1];

  5.    return printf("%d %d\n", sizeof p, sizeof s);
  6. }

复制代码

论坛徽章:
0
30 [报告]
发表于 2005-02-23 15:54 |只看该作者

C语言中有没有sizeof()==1的指针?

明白了!!是翻译的问题!!

info版gcc手册/《gcc:the complete referrence》的意思是,对void这个符号和对函数名而不是对指向它们的指针进行sizeof操作!!

  1.       1 #include <stdio.h>;
  2.       2
  3.       3 int main()
  4.       4 {
  5.       5         printf("sizeof(void) is %d\n",sizeof(void));
  6.       6         printf("sizeof(main) is %d\n",sizeof(main));
  7.       7
  8.       8         return 0;
  9.       9 }
  10.      10
复制代码
  1. [root@localhost test]# gcc -Wpointer-arith aa.c
  2. aa.c: In function `main':
  3. aa.c:5: warning: sizeof applied to a void type
  4. aa.c:6: warning: sizeof applied to a function type
  5. [root@localhost test]# ./a.out
  6. sizeof(void) is 1
  7. sizeof(main) is 1
复制代码

结果就都是1了!!害死人的翻译啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP