-
void
及
void
指
针含义的深刻解析
void
的含义
void
即“无类型”,
void *
则为“无类型指针”,可
以指向任何数据类型。
void
指针使用规范
①
v
oid
指针可以指向任意类型的数据,亦即可用任意
数据类型的
指针对
void
指针赋值。例如:
int *pint;
void *pvoid;
pvoid = pint;
/*
不过不能
pint = pvoid; */
如果要将
pvoid
赋给其他类型指针,则需要强制类型
转换如:<
/p>
pint = (int *)pvoid;
②在
ANSI C
标准中,不允许对<
/p>
void
指针进行算术运
算如
pvoid++
或
pvoid+=1
等,而在
GNU
中则允许,因
为在缺省情况下,
GNU
认为
voi
d *
与
char
*
一样。
sizeof( *pvoid )==
sizeof( char ).
void
的作用
①对函数返回的限定。
②对函数参数的限定。
当函数不需要返回值时,必须
使用
void
限定。例如:
void func(int, int);
当函数不允许接受参数时,必须使用
void
限定。例如:
int
func(void)
。
由于
void
指针可以指向任意类型的数据,亦即可用任
意数据类型
的指针对
void
指针赋值,因此还可以用
void
指针来作为函数形参,这样函数就可以接受任意数据类型
< br>的指针作为参数。例如:
void * memcpy( void *dest, const void
*src,
size_t len );
void * memset( void *
buffer
, int c, size_t
num );
---------------------------
------------------------------
---------
------------
1.
许多初学者对
C/
C++
语言中的
void
及
void
< br>指针类
型不甚理解,因此在使用上出现了一些错误。本文将对
void
关键字的深刻含义进行解说,并详述
void
p>
及
void
指
针类
型的使用方法与技巧。
的含义
void
的字面意思是“无类型”,
void
*
则为“无类
型指针”,
void
p>
*
可以指向任何类型的数据。
void
几乎
只有“注释”和限制程序的作用,因
为从来没有人会定义
一个
void
变量
,让我们试着来定义:
void
a;
这行语句编译时会出错,提示
“
p>
illegal
use
of
type
’
void
’”。不过,即使
void
a
的编译不会出错,它也没有任何实际意义。
< br>
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
*
也可以无需强制类型转换地
赋给其它类型的指
针。因为“无类型”可以包容“有类
型”,而“有类型”则不能包容“无类型”。道理很
简单,
我们可以说“男人和女人都是人”,但不能说“人是男人”
或者“人是女人”。下面的语句编译出错:
void
*p1;
int
*p2;
p2
=
p1;
提示
“’
=
’
:
cannot
convert
from
’
void
*
’
to
’
int
*
’”。
的使用
下面给出
void
< br>关键字的使用规则:
规则一
如果函数没有返回值,那么应
声明为
void
类
型
< br>
在
C
语言中,凡不加返回值类型限定的函数,就会被
编译器作
为返回整型值处理。但是许多程序员却误以为其
为
void
p>
类型。例如:
add
(
int
a,
int
b
)
{
return
a
+
b;
}
int
main(int
argc,
char*
argv[])
{
printf
(
+
3
=
%d
add
(
2,
3)
);
}
程序运行的结果为输出:
2
+
3
=
5
这说明不加返回值说明的函数的确为
int
函数。
林锐博士《高质量
C/
C++
编程》中提到:“
C++
语
言有很严格的类型
安全
检查,不
允许上述情况(指函数不
加类型声明)发生”。可是编译器并不一定这么认定,譬
如在
Visual
C++6.0
中上述
add
函数的编译
无错也无警
告且运行正确,所以不能寄希望于编译器会做严格的类型
检查。
< br>因此,为了避免混乱,我们在编写
C/C++
程序时,对
于任何函数都必须一个不漏地指定其类型。如果函数没有
-
-
-
-
-
-
-
-
-
上一篇:labview数组排序算法
下一篇:MRI中T1和T2的含义与区分