前两天有同学去做笔试题,遇到了这么一个题目:
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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。