函数定义混乱,我发现这个函数的定义关于用C
void *func(void *param) {
}
其实,我对本函数定义了一定的混乱。 void *在函数的返回类型以及参数中表示什么。我是C的初学者,所以请不要介意。谢谢
void *func(void *param) {
int s = (int)param;
....
}
看看上面的程序,我找到了。我认为它应该是
int *s = (int *)param;
不是吗?我很困惑
函数定义混乱,我发现这个函数的定义关于用C
void *func(void *param) {
}
其实,我对本函数定义了一定的混乱。 void *在函数的返回类型以及参数中表示什么。我是C的初学者,所以请不要介意。谢谢
void *func(void *param) {
int s = (int)param;
....
}
看看上面的程序,我找到了。我认为它应该是
int *s = (int *)param;
不是吗?我很困惑
void *
意味着它是一个没有特定类型的指针,把它看作是一个通用指针,不像int *
一个int指针。
如果需要的话,你可以将它转换成不同的类型(例如,如果你要用指针做指针运算)。
您可能会发现使用这太问题:Concept of void pointer in C programming
它只是意味着该函数func
需要一个参数是一个指针(任何事情),并返回一个指针(任何事情)。当你使用一个void *
时,你告诉编译器“这是一个指针,但在这一点上它并不重要,它指向什么”。
当你想要实际使用它指向的数据时,你需要将它转换为指向其他类型的指针。举例来说,如果它指向一个int
,您可以创建一个int *
变量和反引用是:
int *int_ptr = (int *)param;
// now (*int_ptr) is the value param is pointing to
返回任何类型的指针。它可以是任何数据类型。
你可以把它看成是一个原始指针,没有什么比一个地址多,想想看,指针无非地址正确的多,所以他们都应该是相同大小的,在最现代化的系统是32位或64位但如果这就是为什么我们说int *
或char *
左右,如果他们都是一样的大小,以及那是因为我们需要的方式来诠释我们都指向型,int *
意味着当我们提领去该地址和情况将4个字节解释为int
或char *
意味着当我们取消引用到该地址并获取一个字节时,如果您取消引用void *
,那么会发生什么warning: dereferencing ‘void *’ pointer
基本上,我们确实无法做到这一点,如果您的影响是编译器相关的,当我们做算术时也是如此在上面。
那么为什么要使用它们呢?以及我个人不和某些群体不特别喜欢他们,他们根本允许你创建相当通用子程序,一个很好的例子是memset
它设置的内存块的某个字节的值,它的第一个参数是void *
所以不会抱怨是否给出char *
或int *
应注意的是它以每个字节为基础工作,并且您需要正确计算数组的总大小。
void *func(void *param) {
}
param是一个void指针,意味着它是任何引用类型的指针。由于void指针没有对象类型,除非是大小写,否则不能解除引用。
so void *param;
int *s=(int*)param;
在这里,因为一个参数是一个指针变量,所以你会像你一样有投它作为一个指针variable.not到整型。
例如
int x;
float r;
void *p=&x;
int main()
{
*(int *)p=2;
p=&r;
*(float*)p=1.1;
}
在这个例子中,p是一个void指针。现在在主要方法中,我将p作为一个int指针,然后作为一个浮点指针,以便它可以引用第一个整数,然后是float。
你甚至不需要将它转换为不同的类型,它将自己转换为任何其他对象指针。 –