4 c types pointers void void-pointers
我差不多完成了我的C Primer Plus书,我即将参加结构和工会等等......但是我仍然没有完全掌握关键词void的确切含义.无效的是什么?它是如何工作的?我什么时候应该使用它?
我明白那个
void function(void)
Run Code Online (Sandbox Code Playgroud)
基本上说没有回报价值.没有争论.我知道你可以使用不同的场景,
int function(void); //has a return of type int -- voids args
void function(int); //voids return type -- takes type int as an arg
Run Code Online (Sandbox Code Playgroud)
我也明白这一点
void * p = 0L;
Run Code Online (Sandbox Code Playgroud)
是有效的代码,它基本上是一个指向void的指针,初始化值为0 long.
但是以这种方式使用它是否有任何价值或目的
void k = 0;
Run Code Online (Sandbox Code Playgroud)
或者我只是排除数据类型?如果是这样,排除数据类型是否有用?因为从我能够推断的,它在函数和指针中非常有用,用于处理不可确定的数据类型,例如
size_t fwrite(const void * restrict ptr, ...more args...);
Run Code Online (Sandbox Code Playgroud)
因为第一个参数不是固定类型,我的书将其描述为"指针的类型",并且"Pre-ANSI C 对此参数使用类型char*,这要求您对该类型的实际参数进行类型转换".
这是否意味着我可以使用任何数据类型?如果是这样,这是仅限于指针和功能只?
再次......我不关心如何将int转换为void.我并不关心指向无效的指针,而只关注如何有效地使用此关键字.我关心的是"我什么时候应该使用它?" 和"我该如何使用它?".
提前感谢您的任何答案.
以这种方式使用它是否有任何价值或目的
void k = 0;
不,该声明没有任何意义,编译器会抱怨不完整的类型.请注意,每当您void在类型声明中看到使用时,它后跟一个*指示指针的指针,如:
void *foo = nil;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您告诉编译器这foo是一个指针,这实际上是创建它需要知道的全部内容foo.没有*,你试图声明一个没有类型的变量,而这不是编译器(或者人类)可以使用的东西.
由于第一个参数不是固定类型,我的书将其描述为"指针的类型"
第一个参数是 "固定类型" - 类型是指针.确实指针指向的类型是未指定的,但参数本身是指针.
这是否意味着我可以使用任何数据类型?
您可以使用指向任何类型数据的指针.fwrite()获取指向某种类型对象的数组的指针,以及该类型的大小,对象的数量和指向文件的指针,并将这些对象写入文件.fwrite()不关心对象的类型,但由于它没有任何类型信息,您需要显式传递大小和数字.
| 归档时间: |
|
| 查看次数: |
538 次 |
| 最近记录: |