平胸的尴尬,嫁不出去的姑娘

  为什么写这篇文章呢? 为什么要弄这么个题目呢?

  首先解释为什么用这个题目。这一切都要从那天在QQ群中的讨论说起,那天在群中,一个哥们问了一个关于(void)0 的问题。然后大家说到了

(void)0和(void*)0; 大家看看(void)0 和(void*)0 ,是不是一个像个平胸的小妹,一个像个丰韵的美女。

  他问的的问题如下:

(void)0; //这个语句在C语句中可以执行吗?  

  我想了一下这个语句应该没有什么问题,在没有用(void)0,去影响内存对象的情况下,应该是可以的。下面是我在FC 14中进行测试的结果。

[volcanol@volcanol c]$ lsa.out test.c[volcanol@volcanol c]$ cat test.c #include <stdio.h>int main(int argc,char** argv){int test;test=0;(void)0;getchar();return 0;}[volcanol@volcanol c]$ gcc -Wall test.c [volcanol@volcanol c]$

  可以发现,编译过程没有警告和错误信息。

然后,我们就讨论是否可以将(void)0 赋值给其他的对象,于是我就修改了一下,将其改成赋值。

[volcanol@volcanol c]$ cat -n test.c1 #include <stdio.h>main(int argc,char** argv)4 {5int test;67test=(void)0;89getchar();1011return 0;12 }13

编译输出信息:

[volcanol@volcanol c]$ gcc -Wall test.c test.c: 在函数‘main’中:test.c:7:8: 错误:void 值未如预期地被忽略

可以看出,void类型不能通过隐式类型转换为int类型。

既然我们不能将void类型的值赋值,那么定义void类型的变量呢?

[volcanol@volcanol c]$ cat -n test.c1 #include <stdio.h>main(int argc,char** argv)4 {5void test;67test=(void)0;89getchar();1011return 0;12 }13

编译器输出信息如下所示:

[volcanol@volcanol c]$ gcc -Wall test.c test.c: 在函数‘main’中:test.c:5:10: 错误:变量或字段‘test’声明为 voidtest.c:7:8: 错误:void 值未如预期地被忽略

可以发现,不能将变量定义为void类型。

  下面我们来讨论一下整个过程。

1、void类型

void表示为无类型,在 K&R C 里面有明确的说明。

因为不能在Linux下上传图片,所以就不上传图片里,可以到 K&R 第二版的 附录 A.6.7 查看相关的内容。

K&R C里面明确的指出: void类型对象的值不能以任何方式使用,也不能显式或者隐式的转换为非空类型。void类型表示

一个不存在的值,任何对象转换为void类型都将返回一个不存在的值,因此也就不能将void转换为其他非空类型。

2、void类型的作用

【1】声明函数不需要返回任何值

这个需要注意下面两个函数定义的差别:

getx(); getx(); //函数2

注意:函数1和函数2是两个不一样的函数。

【2】声明函数不需要传递任何

getx(); //函数1getx(void); //函数2

注意:函数1和函数2 一样。

【3】返回void对象的表达式语句,作用和空语句一样。

(void)x; // 空对象表达式语句; //空语句

在编译的时候,编译优化后,这两个语句都不产生任何实际代码。

3、void* 类型

指向任何对象的指针都可以转换为void* 类型,而且在转换过程中不会丢失信息;一个被转换为void* 类型的指针可以转换为初始类型,

并且在转换的过程中不会丢失信息。

;char *pVoid = (void*)p;

  下面是我的测试代码:

[volcanol@volcanol c]$ cat -n test.c1 #include <stdio.h>main(int argc,char** argv)4 {;* pVoid=(void*)p;89puts(pVoid);1011getchar();;14 }15[volcanol@volcanol c]$ gcc -Wall test.c [volcanol@volcanol c]$ ./a.outHello world

答:他是憋死的,因为沙漠里没有电线杆撒尿。问:

平胸的尴尬,嫁不出去的姑娘

相关文章:

你感兴趣的文章:

标签云: