C/C++中的void和void*
来源:互联网 发布:反光镜乐队 知乎 编辑:程序博客网 时间:2024/06/06 00:04
一、void
void关键字表示“空类型”的概念。但是,这里的“空类型”不表示“任意类型”,而是表示不存在的意思,也就是说C/C++不允许你写语句void a,不存在类型为void的东西.
void表示“不存在”的意思,可以从void的两个应用中加以体现:
1、void作为函数的返回值类型时,表示函数返回值不存在,即函数没有返回值。
例如:
void FunctionNoReturn_0(std::string strName)
{
std::cout << strName << std::endl;
return;
}
void FunctionNoReturn_1(std::string strName)
{
std::cout << strName << std::endl;
}
FunctionNoReturn_1函数体中虽然没有显式的Return;语句。但是,有隐式的Return;表示函数不存在返回值。
FunctionNoReturnType(void)
{
return 10;
}
在C语言中,凡是不加返回值类型限定的函数,就会被编译器作为返回整型值处理,而不是没有返回值。所以,FunctionNoReturnType函数返回10是正确的。
在C++中,每个函数必须限定返回值类型,不允许不加返回值限定。所以,C++编译器会对FunctionNoReturnType报错。
2、void作为函数的参数的限定时,表示函数形参不存在,即函数没有形参。
例如:
void FunctionNoArgument_0(void)
{
return;
}
void FunctionNoArgument_1()
{
return;
}
注意:void FunctionNoArgument_1();这也表示没有形参。
在C语言中,FunctionNoArgument_1(10);是合法的。编译器不会报错。
在C语言中,FunctionNoArgument_0(10);是不合法的。编译器会报错。
在C++语言中,FunctionNoArgument_1(10);和FunctionNoArgument_0(10);
都是不合法的。编译器会报错。
C语言中不报错,也没什么关系的。因为,参数10对于函数的执行的结果没有影响。但是,对于代码的维护可能会造成隐藏的危害,可能会给别人造成误解。
说明:既然提供了void的这两种用法,就去运用。即函数没返回值就将其返回值类型写为void,函数没有形参就将其形参写为void。不了解编译器默认操作时,不要依赖。即使了解其默认操作,也别依赖,因为肯定有人不了解的,这样别人就看不懂你的代码了。
二、void*
void*表示“空类型指针”,与void不同,void*表示“任意类型的指针”或表示“该指针与一地址值相关,但是不清楚在此地址上的对象的类型”。(为什么不用void表示任意类型的数据呢?大家都知道,C/C++是静态类型的语言,定义变量就会分配内存,然而,不同类型的变量所占内存不同,如果定义一个任意类型的变量,如何为其分配内存呢?所以,C、C++中没有任意类型的变量。但是,所有指针类型的变量,无论是int*、char*、string*、Student*等等,他们的内存空间都是相同的,所以可以定义“任意类型的指针”)。
C++/ANSI C:
void*指针只支持几种有限的操作:与另一个指针进行比较;向函数传递void指针或从函数返回void*指针;给另一个void*指针赋值。不允许使用void*指针操作它所指向的对象,例如,不允许对void*指针进行解引用。不允许对void*指针进行算术操作。
GNU C:
GNU C指定void*指针的算术操作与char*一致。
void*表示“任意类型的指针”,主要运用于内存操作函数的形参类型和返回值类型(内存操作与内存中数据类型无关,即任意类型都可以)。
引自:http://blog.sina.com.cn/s/blog_8961925401016t9y.html
- C/C++中的void和void*
- C/C++中的void和void*
- C/C++中的void和void*
- C/C++中的void和void*
- C/C++中的void和void*
- C/C++中的void和void*
- C/C++中的void和void*
- C/C++中的void 和 void *
- C/C++中的void和void*
- C和C++中的void*
- C/C++中的函数中的void和void* 理解
- C语言中的void 和void 指针类型
- C语言中的void 和void 指针类型
- C语言中的void 和void 指针类型
- C语言中的 void*
- c/c++ 中的void 与void *区别
- C语言的void和void *(48)
- C&C++(2) - void*在C和C++中的不同点
- 判断Activity是否运行
- 黑暗
- 大规模并发问题
- 【PA2014】【BZOJ3709】Bohater
- Push推送
- C/C++中的void和void*
- 文章标题
- 写点心情。明天开始不上X景了。哎。
- HDU 5439 Aggregated Counting
- C/C++中的输入与输出及如何读取一行文本
- iOS开发:利用SDWebImage实现图片加载与缓存
- rac安装GI时运行root.sh报错
- 让你不再害怕指针
- textarea内容有换行时存入数据库丢失问题的解决