前两天有同学去做笔试题,遇到了这么一个题目:

sizeof(void);

结果是多少?仔细一想,好像真没写过这样的代码。

void 也是C语言中常见的类型,一般用于修饰函数的类型。

比如函数不需要返回数据,就会在前面加上void。

void test();

如果函数没有参数,形参括号里面也可以加上void。

void test(void);

那 void 能不能用于定义变量?

void a;

这个肯定不行,编译的时候就会当作语法错误处理。

原因的话,我觉得可能是定义变量的时候,编译器不好给他分配内存。

printf("%lun", sizeof(void));

在 环境下sizeof,强行输出:

sizeof(void)

结果是1,而且在gcc的相关文档中也明确表示,允许使用在void和函数名上,结果返回1。

In GNU C, addition and subtraction operations are supported on pointers to void and on pointers to functions. This is done by treating the size of a void or of a function as 1.
A consequence of this is that sizeof is also allowed on void and on function types, and returns 1.
The option -Wpointer-arith requests a warning if these extensions are used.

但是在其他编译器下结果怎么样,没有试过。

所以总结一下,(void)没什么实际意义。

但是 void * 类型就非常的实用。

它可以用来定义变量,表示变量是个指针,但是指针指向什么类型的数据,只有等使用的时候才知道。

因为指针是有长度的,所以编译器给他分配内存也没有问题。

再比如我们经常使用的函数,它只负责在堆空间分配内存,但是这段内存保存什么类型的数据,也只有用户自己知道,于是直接返回void *sizeof,反正它是个地址,等到使用的时候,再由用户进行强转就行。

char *addr = (char *)malloc(sizeof(char) * 128);

前面我们讲过的很多用法,没想到它还是层出不穷,既然这样,我又想到了一个:

siezof('a');

结果是多少?如果你知道答案,欢迎私信留言。


限时特惠:
本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情

站长微信:Jiucxh

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注