易截截图软件、单文件、免安装、纯绿色、仅160KB

C/C++语言void及void指针深层探索

C/C++语言void及void指针深层探索
1.概述
许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。
2.void的含义
void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。
void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:
void a;
这行语句编译时会出错,提示“illegal use of type ‘void‘”。不过,即使void a的编译不会出错,它也没有任何实际意义。
void真正发挥的作用在于:
(1) 对函数返回的限定;
(2) 对函数参数的限定。
我们将在第三节对以上二点进行具体说明。
众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。
例如:
float *p1;
int *p2;
p1 = p2;
  其中p1 = p2语句会编译出错,提示“‘=‘ : cannot convert
    from ‘int *‘ to ‘float *‘”,必须改为:
p1 = (float *)p2;
而void *则不同,任何类型的指针都可以直接赋值给它,
   无需进行强制类型转换:
void *p1;
int *p2;
p1 = p2;
但这并不意味着,void *也可以无需强制类型转换地赋给其它类型的指针。
  因为“无类型”可以包容“有类型”,而“有类型”则不能包容“无类型”。
   道理很简单,我们可以说“男人和女人都是人”,但不能说“人是男人”
    或者“人是女人”。下面的语句编译出错:
<ccid_nobr>
<table width="400" border="1" cellspacing="0" cellpadding="2"
bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">
<tr>
    <td bgcolor="e6e6e6" class="code" style="font-size:9pt">
    <pre><ccid_code>  
void *p1;
int *p2;
p2 = p1;
  提示“‘=‘ : cannot convert from ‘void *‘ to ‘int


相关文档:

Linux C语言学习笔记

1、int    4字节
   long   8字节
   float  4字节
   double 8字节
   long double 16字节
2、一个字符变量只能存放一个字符、一个字节存放一个字节
   char c;
   c = 'a';    c = '\034'   ......

从C++干到转型为java是退步,正确与否?

今天在逛论坛的时候看到有人津津乐道:从C++干到转型为java是退步
我不认为是这样,首先应该一个人的兴趣,加上这门语言,这门工作是否符合你
干自己喜欢的语言编码才是最重要的,当然java比较容易点,我也是这样认为的
但是java并不是大家所说的那么容易,当今社会谁不敢说自己会ssh,当是自己问心自己学得有多好,
在 ......

顺时针方法 解读 C 复杂宏定义

[This was posted to comp.lang.c by its author, David Anderson, on 1994-05-06.]
The ``Clockwise/Spiral Rule''
By David Anderson
There is a technique known as the ``Clockwise/Spiral Rule'' which enables any C programmer to parse in their head any C declaration!
There are three simple steps to fo ......

C/C++求最大公约数和最小公倍数(转)

下面用到的方法叫辗转相除法,具做步骤如下   
    
   先用小的一个数除大的一个数,得第一个余数;   
   再用第一个余数除小的一个数,得第二个余数;   
   又用第二个余数除第一个余数,得第三个余数; &nb ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号