c 中void* 与其它类型指针相互赋值的问题

netxuning 2006-12-12 06:29:59
我记得一篇

#include <stdio.h>
int main()
{
int *ip;
void *vp;

ip = vp;
vp = ip;

return;
}
gcc编译通过
不过我记得一篇文章中说:
只能vp = ip; 而不能ip = vp;
怎么回事?
...全文
1677 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuge6_24 2006-12-13
  • 打赏
  • 举报
回复
dream21c正解!
在c++中,可以把void*想象成基类或泛型.基类可以指向子类,而子类必须强转才能指向基类
非const不能指向const,是为了防止数据破坏.
lockhall 2006-12-12
  • 打赏
  • 举报
回复
gcc也只是编译器~

在VC下是不行的~

对于void *转换成int *要显示转换

忽然想起以前看的文章

#include <stdio.h>
int main()
{
const int *ip;
int *vp;

ip = vp;
vp = ip; //对于const修饰的指针是不能做此操作的~^_^

return;
}
  • 打赏
  • 举报
回复
undefined behavior gives out any result
  • 打赏
  • 举报
回复
Run: C:\MinGW\bin\mingw32-make.exe
gcc -ansi -pedantic -Wall -W -c -o a.o a.c
a.c: In function `main':
a.c:9: warning: implicit declaration of function `printf'
a.c:10: warning: wrong type argument to increment
a.c:12: warning: control reaches end of non-void function
gcc -ansi -pedantic -Wall -W a.o b.o -o a.out

Press the Enter key to return to Source Insight...

netxuning 2006-12-12
  • 打赏
  • 举报
回复
gcc 确实不报任何错
而且用gcc这样都行:
#include <stdio.h>

int main()
{
char a[] = "we are the champion my friend!";
void *vp;

vp = a;
while(*(char*)vp)
{
printf("%c\n", *(char*)vp);
++vp; //这样都行
}
}
dream21c 2006-12-12
  • 打赏
  • 举报
回复
在C里,void*可以和其他任何指针(函数指针除外)相互转换而不需要类型转换的,C++里类型检查比较严格,需强制转换
manrenmanren 2006-12-12
  • 打赏
  • 举报
回复
其他类型的指针可以直接赋值给void*
但是void *需要强制转换才可以赋值给其他类型
jixingzhong 2006-12-12
  • 打赏
  • 举报
回复
一般来说,
void 类型的数据是不能直接使用的,
所以, ip = vp; 需要显式转化 .....
jixingzhong 2006-12-12
  • 打赏
  • 举报
回复
把类型转化一下 最合适不过 ...
lann64 2006-12-12
  • 打赏
  • 举报
回复
gcc编译应该通不过吧。
ip=(int*)vp;才可以。
friday5pm 2006-12-12
  • 打赏
  • 举报
回复
这种问题多试试。你把值放到变量里面看变化。
指针指向不同数据类型要做强制类型转换吧,要不然可能不能正确读出内容。
cmail 2006-12-12
  • 打赏
  • 举报
回复
在C++中ip = vp需要一个显式转换才能成功。
vp = ip;可以。

70,038

社区成员

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

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