void*的函数和指针的问题

时间:2022-03-29 17:06:14
void *
Malloc(int size)
{
        void    *ptr;

        if ( (ptr = malloc(size)) == NULL)
                printf("malloc error");
        return(ptr);
}
-----------------------------
问题:一般什么时候用void*函数和指针,有什么优缺点?

20 个解决方案

#1


我从来不用void* Malloc(int);
不过有时用void (*Malloc)(int);

#2


void*是无类型指针,在以前没有引入void*的时候,可以用char*来代替。
void*所指向的目标编译器不知道其大小(因为不知道是什么类型,默认步进是一个byte),所以有些编译器不支持void*类型的运算,如vc,但是gcc可以。
void*具体的用法比较的少,正如它的名字一样,在不能确定类型的时候用,比如说要用c写一个能接受任何类型的堆栈什么的,可能会用到。有时候在一些比较低级的场合会用到。

#3


void *主要用于通用指代的情况下,从字面上看比char *含义更明确。比如Malloc并不知道需要分配内存的具体数据类型是什么,它只管分配内存然后返回一个无类型指针。使用时注意类型转换。

#4


你用void*的时候一般要把他还原成他原来的类型,其他也没什么,只不过是是它可以指向任何一个对象,说白了就是它就光代表一个地址

#5


任何指针都有默认的转换为void*的方法而不需要cast.
这是void*优点之一

#6


一般在对象类型无法确定或者在操作的时候发生类型变化的时候使用VOID*指针,而VOID*的好处在于可以对指针指向对象的不确定性,能在后面强制转换来删除。

#7


实际上void*可以指向任和一个地址,你想总线错误就用它!!!

#8


被使用前都强制转换。

#9


void*的问题很少被整理出来哦。

#10


void * 就是LPVOID

英语好象叫 Generation Pointer
不知道错了没~~

#11


应该打印出 malloc error吧 !

#12


喔,我认为void*的作用主要还是在返回值上,毕竟用void返回后,可以指代任何类型的指针,返回后可以强制转换成需要的类型指针。一般认为它指向一个不确定大小与类型的空间。但如果需要的话,也可以用它作形参,来接受任意类型的指针。

#13


一般不需要用这个东东,如果用了,那就要小心检查程序相关的美一寸肌肤了!

#14


学习

#15


学习ing 值得关注

#16


void * 我认为写成“通用指针”更好理解一些

#17


感觉void*更加灵活,简直是万能指针啊!

#18


回复人: tanxingqiu(谈谈) ( ) 信誉:100  2005-02-15 23:18:00  得分: 0  
 
 
   一般不需要用这个东东,如果用了,那就要小心检查程序相关的美一寸肌肤了!

此话从何讲起????
  
 

#19


不多说,你可以从我每一个代码文件中看到void*的存在。
在一些隐讳的地方,用void* ,确保安全。

#20


谢谢楼上各位回答!

#1


我从来不用void* Malloc(int);
不过有时用void (*Malloc)(int);

#2


void*是无类型指针,在以前没有引入void*的时候,可以用char*来代替。
void*所指向的目标编译器不知道其大小(因为不知道是什么类型,默认步进是一个byte),所以有些编译器不支持void*类型的运算,如vc,但是gcc可以。
void*具体的用法比较的少,正如它的名字一样,在不能确定类型的时候用,比如说要用c写一个能接受任何类型的堆栈什么的,可能会用到。有时候在一些比较低级的场合会用到。

#3


void *主要用于通用指代的情况下,从字面上看比char *含义更明确。比如Malloc并不知道需要分配内存的具体数据类型是什么,它只管分配内存然后返回一个无类型指针。使用时注意类型转换。

#4


你用void*的时候一般要把他还原成他原来的类型,其他也没什么,只不过是是它可以指向任何一个对象,说白了就是它就光代表一个地址

#5


任何指针都有默认的转换为void*的方法而不需要cast.
这是void*优点之一

#6


一般在对象类型无法确定或者在操作的时候发生类型变化的时候使用VOID*指针,而VOID*的好处在于可以对指针指向对象的不确定性,能在后面强制转换来删除。

#7


实际上void*可以指向任和一个地址,你想总线错误就用它!!!

#8


被使用前都强制转换。

#9


void*的问题很少被整理出来哦。

#10


void * 就是LPVOID

英语好象叫 Generation Pointer
不知道错了没~~

#11


应该打印出 malloc error吧 !

#12


喔,我认为void*的作用主要还是在返回值上,毕竟用void返回后,可以指代任何类型的指针,返回后可以强制转换成需要的类型指针。一般认为它指向一个不确定大小与类型的空间。但如果需要的话,也可以用它作形参,来接受任意类型的指针。

#13


一般不需要用这个东东,如果用了,那就要小心检查程序相关的美一寸肌肤了!

#14


学习

#15


学习ing 值得关注

#16


void * 我认为写成“通用指针”更好理解一些

#17


感觉void*更加灵活,简直是万能指针啊!

#18


回复人: tanxingqiu(谈谈) ( ) 信誉:100  2005-02-15 23:18:00  得分: 0  
 
 
   一般不需要用这个东东,如果用了,那就要小心检查程序相关的美一寸肌肤了!

此话从何讲起????
  
 

#19


不多说,你可以从我每一个代码文件中看到void*的存在。
在一些隐讳的地方,用void* ,确保安全。

#20


谢谢楼上各位回答!

#21