C语言关键字浅析-void

### C语言关键字浅析系列 ###

### ISO/ANSI C 关键字 ###

void在英文中的意思是“无效的;太空;空的”,C语言中的void想表达的大概是最后这层意思,即空的

void有可能是你接触C语言伊始最早接触到的关键字之一(只是有可能,因为主函数可以没有void字样)

不过确实void将是你后面的编程之路中非常常用的一个关键字,包括在C++、java和C#等其他高级编程语言中都是这样

 

void的作用是:

在程序中表示一种“没有值可以用来获得”的意象。

 

1、扎堆的void

void估计最常见之处就是有函数的地方了,对于无参数返回的函数,我们一般就用void表示它的类型:

int getMax(int a, int b);    /* 这是需要有返回值的函数 */
void addToList(double df);   /* 这是不需要有返回值的函数 */
void insertIntoDatabase();   /* 函数没有参数的时候经常看到这样的写法,小括号内什么都没有 */
void insert(void);           /* 其实上述写法是这种的省略 */
bool deleteTable(void);      /* 这是有返回值没有参数的情况 */

有时候学习者会有这样的疑惑:void函数什么也不返回,其是不是没有什么意义?

事实恰好相反!void函数在很多源程序中被大量使用,我写过的和我见过的源程序中,void函数数量几乎超出了有返回值函数的很多倍

虽然void函数什么也不返回,但函数的设计思想是什么?封装啊。很多void函数,我们其实把它们是当做一组规定动作,方便我们在其他的程序中直接调用,比如数据库中的增删改查动作,没有函数的情况下,我们只能在程序每个需要增删改查的地方复制粘贴增删改查的代码,但引入函数的概念后,我们只需要在主程序中调用增删改查的函数,无非就是再给它几个参数,函数们就乖乖地按要求做完事了

但很多规定动作并不需要一个特定的返回值,所以void函数由此被广泛应用:

void insert(){}          /* 向数据库的一个表插入一个数据项,不需要返回什么 */
void button_Click(){}    /* 按钮控件的点击事件,不需要返回什么 */  
void launchMessage(){}   /* UDP数据包的发送,不需要返回什么 */
void count_Thread(){}    /* 子进程的委托函数,不需要返回什么 */

这下我们就能理解很多C程序中的main函数的格式了,常见的有下面这些:

int main(void){   /* main函数的小括号内把void写上的情况,表示main函数没有参数 */
	return 0; /* C Primer Plus中就用了这种写法 */
}

int main(){       /* 这种情况也很常见,省略void表示main函数没有参数 */
	return 0;
}

main(){           /* 这种省略int的写法不多了,但编译器会默认为int的,上述三种情况如果缺省了return 0,编译器会补充上的 */
	return 0;
}

void main()       /* 这种写法在C语言中不太接地气,但在C++中可以成功运行,C99标准开始规定用int main形式, */
{}                /* 所以请放弃在C编程中用这种main函数写法 */

2、void表达式

居然还有没有值的表达式,刚听到这个概念的时候觉得挺新奇的,但定睛一看,原来是老熟人

比如最常见的,调用void函数的语句,就是一个没有值的void表达式:

void insert(int a){}   /* 把整数插入数组的函数 */

int main(void)
{
	insert(3);        /* 这就是void表达式,算是老熟人了 */
	(void)insert(3);  /* 这叫显式地把函数的返回值丢弃了,其实本来也没有返回值,不过听这意思就是反正能丢 */
	return 0;
}

3、void指针

熟人也有你不熟的一面

比如void类型的指针,说不定你都没听过,都void了还能指针呢,这一听就是大神级的操作

Internet另一端的某大神是这样说的:void*类型的指针,只代表了对象的地址,但没有该对象的类型信息。

明白了……这就叫单身久了,大街上随便找一个对象,类型都不管了,可不像int*和char*那种妖艳jian货还有类型要求

不过这么神奇的存在,要怎么使用?通常,void指针用在函数中:

void free(void *ptr){}         /* 函数的参数是void指针类型,使得该函数能使用多种类型的指针参数 */
void *malloc(){size_t size}{}  /* 函数类型是void指针类型的,使得函数能返回多种类型的指针参数 */
void *realloc(void *ptr, size_t size){}   /* 这就叫放飞自我了,通吃 */

 

——参考《C Primer Plus第五版》

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值