关于void指针的问题

alfamoon 2013-03-30 08:42:14
void swap(void** v,int i,int j){
void* temp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
}

这里的temp不是一个void的指针吗?
为什么可以当中间值交换两个数字,
v[i] & v[j]这两个都是对值本身而不是指针啊??
...全文
371 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
SKATE11 2013-04-02
  • 打赏
  • 举报
回复
void是空 你得给它个类型才能从buffer里面取值啊
standupshjzh 2013-04-02
  • 打赏
  • 举报
回复
楼主的swap函数里的V是指向指针的指针,或者是一个指针数组,即数组里的每一个元素都是一个指针;而在main函数中,int v[2]={10,1};v是一个普通的数组,数组里的每一个元素是int型的,不是指针。所以在调用swap函数时,参数类型不一致。但是调用函数的时候实际传递的是数组的首地址,所以swap函数就把一个普通的数组当成指针数组了,把v[2]里面的值当成指针(即地址)了,“printf("%d,%d",v[i],v[j]) 输出的是指针,但是由于swap把v[2]里面的值当成了指针,所以你就看到它输出了值”。
  • 打赏
  • 举报
回复
这个没看懂 ,等大神 讲解。。。。
千树之影 2013-04-02
  • 打赏
  • 举报
回复
引用 11 楼 alfamoon 的回复:
而v[i],v[j]不是指针而是value
v[i],v[j]是指针!
ytlcainiao 2013-04-01
  • 打赏
  • 举报
回复
int a[100]; int *p=a; *p[1]==*(p+1);
guhanghui 2013-04-01
  • 打赏
  • 举报
回复
引用 11 楼 alfamoon 的回复:
printf("%d,%d",v[i],v[j]) 这里出来的%d 值也是指针地址 等效于 %p 不是地址还是真是的值! #include <stdio.h> void swap(void** v,int i,int j){ printf("%d %d\n",v[i],v[j]); void* temp; ……
楼主搞笑了吧 swap的形参是**v, 在main里面调用的是int v[2]={10,1}; swap(v,0,1); v是*,而不是**, 要么把swap函数的**v改成int v[] int* v, 要么把swap(&v,0,1), 注意定义数组的时候,直接用数组名不带下标,表示的是这个数组的起始地址。
guhanghui 2013-04-01
  • 打赏
  • 举报
回复
你传进来的是**v, v[i],v[j]里面还是*啊。
alfamoon 2013-03-31
  • 打赏
  • 举报
回复
我实在是不会,求大神讲解
alfamoon 2013-03-31
  • 打赏
  • 举报
回复
大家看看 谢谢
alfamoon 2013-03-31
  • 打赏
  • 举报
回复
printf("%d,%d",v[i],v[j]) 这里出来的%d 值也是指针地址 等效于 %p 不是地址还是真是的值! #include <stdio.h> void swap(void** v,int i,int j){ printf("%d %d\n",v[i],v[j]); void* temp; temp=v[i]; v[i]=v[j]; v[j]=temp; } int main() { int v[2]={10,1}; swap(v,0,1); int i=0; for(i=0;i<2;i++){ printf("%d\n",v[i]); } return 0; } 请验证, 还有就是 任何指针类型都可以转换为void *而v[i],v[j]不是指针而是value 求解ing
Athenacle_ 2013-03-31
  • 打赏
  • 举报
回复
我最好奇的是,为什么v[j]这东东可以编译的过。。楼上的都试过了么?
h_w_m 2013-03-31
  • 打赏
  • 举报
回复
关于void void tmp;//这里语法错误,不能定义"无"类型的变量 void 修饰在函数前或形参中,或指针变量*号前,分别可以表示不返回值,不带形式参数,不明类型的泛指针 fun(void) 明确说明函数fun不带参数 void fun() 明确说明函数fun不带返回值 void *p 明确的指出p是指针但所指向的数据类型未定 关于指针 void **v; //v是二星指针,可以当做是指向指针数组的指针,每个元素都是void *型 void *temp;//temp是一星指针 本身的内容就是一个地址值 v[i] v[j] temp 有相同的类型,都是void *型, 是基本数据类型 这个类型叫做 指针
pengyude 2013-03-30
  • 打赏
  • 举报
回复
printf("%d,%d",v[i],v[j]) 这里出来的%d 值也是指针地址 等效于 %p void** v 的每一个下标运算符出来的 v[i] 就是一个 void *, 所以跟 temp是可以互相赋值的。 比如 void *p1 = NULL; void **pp1 = &p1; 那么 pp1[0] 就是 p1
alfamoon 2013-03-30
  • 打赏
  • 举报
回复
求指教啊 谢谢
alfamoon 2013-03-30
  • 打赏
  • 举报
回复
void** v 这句的意思是 传入一个数组指针,然后将这个数组指针强制转换为void指针吧? v[i] & v[j]不是值本身,而是指针 可是 printf("%d,%d",v[i],v[j])的时候打出确实值而不是地址?
Code_Talk 2013-03-30
  • 打赏
  • 举报
回复
楼上说的对,v[i] & v[j]不是值本身,而是指针。
老火 2013-03-30
  • 打赏
  • 举报
回复
参数是void** v,v[i]&v[j]可不就是void*么?和temp相互赋值没有问题啊
AnYidan 2013-03-30
  • 打赏
  • 举报
回复
/* swap: interchange v[i] and v[j] */ void swap(int v[], int i, int j) { int temp; temp = v[i]; v[i] = v[j]; v[j] = temp; }
Athenacle_ 2013-03-30
  • 打赏
  • 举报
回复
能不能先说说看,你想干啥?。。。
Emiyasstar__ 2013-03-30
  • 打赏
  • 举报
回复
引用 2 楼 Emiyasstar__ 的回复:
空指针只能传地址用,不能赋值
说错了,ms v[i]这句有问题,空指针不能解引用
加载更多回复(2)

69,394

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧