(资料图片仅供参考)

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

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

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

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

void test();
如果函数没有参数,形参括号里面也可以加上void。
void test(void);
那 void 能不能用于定义变量?
void a;
这个肯定不行,编译的时候就会当作语法错误处理。原因的话,我觉得可能是定义变量的时候,编译器不好给他分配内存。
printf("%lu", sizeof(void));
在 Ubuntu 环境下,强行输出:
sizeof(void)
结果是1,而且在gcc的相关文档中也明确表示,sizeof允许使用在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.
但是在其他编译器下结果怎么样,没有试过。所以总结一下,sizeof(void)没什么实际意义。但是 void * 类型就非常的实用。它可以用来定义变量,表示变量是个指针,但是指针指向什么类型的数据,只有等使用的时候才知道。因为指针是有长度的,所以编译器给他分配内存也没有问题。再比如我们经常使用的malloc函数,它只负责在堆空间分配内存,但是这段内存保存什么类型的数据,也只有用户自己知道,于是malloc直接返回void *,反正它是个地址,等到使用的时候,再由用户进行强转就行。
char *addr = (char *)malloc(sizeof(char) * 128);
前面我们讲过sizeof的很多用法,没想到它还是层出不穷,既然这样,我又想到了一个:
siezof("a");
结果是多少?如果你知道答案,欢迎私信留言。   审核编辑:汤梓红

关键词: