代码: 全选
void swap(void **p1,void **p2)
{
void *pt=*p1;
*p1=*p2;
*p2=pt;
}
感觉任何类型都可以传给void才对。这是为什么?
代码: 全选
void swap(void **p1,void **p2)
{
void *pt=*p1;
*p1=*p2;
*p2=pt;
}
代码: 全选
void swap(void *pa,void *pb)
{
void **p1=pa, **p2=pb, *pt;
pt=*p1;
*p1=*p2;
*p2=pt;
}
又是你呀,太感谢了。真是热心好人士啊~cuihao 写了:能接受所有指针的是 void *,不是 void **。
void ** 是指向 void * 类型的指针,是有类型的指针,不是无类型的指针。
你可以忽略warning,也可以这么写:
有些变量是多余的,但为了看清楚,就这么写了。代码: 全选
void swap(void *pa,void *pb) { void **p1=pa, **p2=pb, *pt; pt=*p1; *p1=*p2; *p2=pt; }
唔,不怎么写代码,不知道有没错误,反正LZ知道意思就行了……
将要代入的变量都转换为void** 类型的吗?我试了一下好像可以。eexpress 写了:强制转换就是。
感谢你,我按照你说的做了,确实可以。cuihao 写了:我那个写法应该是没错的,或者至少不是LZ指出的这个错误。
LZ应该还有一点没转过来。我的原型是 void swap(void *pa,void *pb),接受的参数是指针,但不代表要用指针原型来调用。因为函数要修改指针,应该用 swap(&p3,&p4) 这样调用。
还有一点,就是,将char**的数据传递给void*的时候,比如pa=&p3,这个时候*pa好像就不是代表p3,也就是说void*可以存储char**的值,但不能引用char**所指向的指针是吗?cuihao 写了:我那个写法应该是没错的,或者至少不是LZ指出的这个错误。
LZ应该还有一点没转过来。我的原型是 void swap(void *pa,void *pb),接受的参数是指针,但不代表要用指针原型来调用。因为函数要修改指针,应该用 swap(&p3,&p4) 这样调用。
代码: 全选
*(char**)pa
好的,非常感谢你,我会好好总结思考。这个东西还是要多练练。cuihao 写了:void*没有指明指向的数据类型,不能取值,必须得重新转换回去才行。代码: 全选
*(char**)pa