gpt4 book ai didi

c - void 类型到底是什么,它是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 15:19:37 24 4
gpt4 key购买 nike

我几乎完成了我的 C Primer Plus 这本书,我即将学习结构和 union 等等……等等……,但我仍然没有完全掌握关键字 void 到底是什么.虚空有什么作用?它是如何工作的?我应该什么时候使用它?

我明白了

void function(void)

基本上就是说没有返回值。没有争论。我知道您可以使用不同的场景,

int function(void); //has a return of type int -- voids args
void function(int); //voids return type -- takes type int as an arg

我也明白了

void * p = 0L;

是有效代码,它基本上是一个指向 void 的指针,其初始化值为 0 long。

但以这种方式使用它是否有任何值(value)或目的

void k = 0;

或者我只是在作废数据类型?如果是这样,取消数据类型是否有用?因为据我推断,它在函数和指针方面非常有用具有不可定义的数据类型,例如

size_t fwrite(const void * restrict ptr, ...more args...);

由于第一个参数不是固定类型,我的书将其描述为“指针的通用类型”,并且“ANSI C 之前的版本使用 char * 类型作为该参数,这需要你将实际参数类型转换为该类型”。

这是否意味着我可以使用任何 数据类型?如果是这样,这是否仅限于指针和函数

再次...我不关心如何将 int 转换为 void。我不关心指向 void 的指针是否有效,而只关心如何有效地使用此关键字。我担心“我应该什么时候使用它?”和“我应该如何使用它?”。

提前感谢您的回答。

最佳答案

is there any value or purpose to using it in such a way

void k = 0;

不,该语句没有任何意义,编译器会提示类型不完整。请注意,每当您在类型声明中看到 void 时,它后面都会跟着一个指示指针的 *,例如:

void *foo = nil;

在这种情况下,您是在告诉编译器 foo 是一个指针,这实际上是创建 foo 所需知道的全部内容。如果没有 *,您将尝试声明一个没有类型的变量,这不是编译器(或人类,就此而言)可以处理的。

since the first argument is not a fixed type, my book describes this as being a "catchall type for pointers"

第一个参数“固定类型”——该类型是一个指针。确实指针指向的类型是未指定的,但参数本身是一个指针。

Does this mean that I can use any data type?

您可以使用指向任何类型数据的指针fwrite() 获取指向某种类型对象的数组的指针,以及该类型的大小、对象的数量和指向文件的指针,并将这些对象写入文件. fwrite() 不关心对象的类型,但由于它没有任何类型信息,您需要显式传递大小和数量。

关于c - void 类型到底是什么,它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25966180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com