各种void
来源:互联网 发布:淘宝开网店的详细步骤 编辑:程序博客网 时间:2024/05/15 11:47
1. void
这个不难理解, 就是一个空类型.
1) 可以用在函数, 例如: void fun(int, int)
2) 可以用在函数参数, 例如:void fun(void), int main(void)
3) 可以用来强制类型转换, 例如:#define ZERO (void)0.
此时ZERO便不能做右值, 也就是说, int a=ZERO这样的语句会出现错误, 编译不了. 但如果将之前两句改为改为
#define ZERO 0;
int a=ZERO;
则编译器不会出错, 程序也能正常运行, a的值也会变为0;
4) 不能作为数据的类型, 例如: void a; 想定义一个void类型的a变量的时候, 编译器会报错.
2. void *
这个比void稍微难理解, 这是一个万能的指针类型, 而不是空指针类型.
1) 在c的stddef.h或stdio.h里面, 都可以找到这样一段话
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
这段程序定义了NULL这个宏. 关键看红色那一句. 我们都知道NULL代表一个任意类型的空指针, void *的意思跟NULL也就异曲同工. (void *)后面那个0代表空指针NULL指向的内存地址为0, 外面再套一层括号是因为宏的安全问题(有关c语言的宏的使用问题, 可以百度一下, 这里不展开论述).
2) 我们先看一段程序
#include <stdio.h>
int main()
{
int *p=new int;
double *pp=new double;
void *ppp;
*p=1;
*pp=1.1;
ppp=p;
printf("%d\n",*(int *)ppp);//强制类型转换为int的指针, 再加*取值
ppp=pp;
printf("%lf\n",*(double *)ppp);//强制类型转换为double的指针, 再加*取值
return 0;
}
各定义一个int, double和void类型的指针, 把p地址的值赋为1, pp地址的值赋为1.1, 再用万能指针ppp分别指向p的地址和pp的地址, 最后分别输出ppp指针指向的内存地址的值.
程序输出结果如下, ppp分别指向了p和pp并把里面的值输出.
通过程序我们可以简单地了解了一下void *这个万能指针的含义.更多void *的信息请上网百度一下, 这里只是补充了一下网上说得比较少, 但又比较重要的内容
- 各种void
- void *
- void
- void
- void
- void
- void
- void*
- void
- void
- void
- void
- void
- void
- void
- (void**)&
- void *
- void
- RTP Payload Format--- Payload Structures
- Sudoku Checker
- PAT Advanced 1043
- TX2440裸机程序之-LED
- java变量的存储位置
- 各种void
- SVN1.8.3简单安装及配置
- 错误“Unexpected namespace prefix "xmlns" found for tag LinearLayout”的解决方法
- P1055 奶牛浴场 - Vijos
- mybatis和spring3整合,控制台输出sql语句.
- windows下 DLL 的学习
- 查漏补缺
- 40 - Wildcard Matching
- [Facebook] 给两棵二叉树A,B,判断A 是否 B的子结构