void *

残雪孤狼 2014-07-30 11:30:40
今天在gcc上试了下 下面的语句
int *p=NULL;
void * p1=NULL;
p = p1;
呵呵,正常运行 以前学的是 任何类型指针可以赋给 无类型的指针 倒过来就不可以
还经常看到一个生动的例子说 “女人 男人是人 但不能说人是男人(女人) " 可是在gcc上 ”人是可以说成是男人(女人)的“

在vc上试了下 呵,会报错
为什么呢,查了下 原来c99中有说可以将无类型指针赋给其他类型指针 不用强制转换 gcc支持c99
vc不支持c99吧

大家什么看法,,发表一下吧
...全文
271 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Orange_ou 2014-07-31
  • 打赏
  • 举报
回复
引用 9 楼 zxh707wk 的回复:
引用 8 楼 Oringe_new 的回复:
看样子卤煮是在VS直接创建项目 生成了CPP项目了 把CPP的后缀名换成C看看
都说了是VC了嘛
就是说啊 只是创建了一个c++的项目 把后缀名换成C 你看他还会编译错了没? 也就是警告
707wk 2014-07-31
  • 打赏
  • 举报
回复
引用 3 楼 lisong694767315 的回复:
在C语言中,void指针可以直接赋给其他类型的指针,如int *, char *等。但在C++中,void指针必须要明确地进行类型转换。(比如malloc函数返回值为void *类型)

    void *vptr;  
    int *iptr = vptr; // C++中必须用int *iptr = (int *)vptr;  
+1
707wk 2014-07-31
  • 打赏
  • 举报
回复
引用 8 楼 Oringe_new 的回复:
看样子卤煮是在VS直接创建项目 生成了CPP项目了 把CPP的后缀名换成C看看
都说了是VC了嘛
Orange_ou 2014-07-31
  • 打赏
  • 举报
回复
看样子卤煮是在VS直接创建项目 生成了CPP项目了 把CPP的后缀名换成C看看
xiaohuh421 2014-07-31
  • 打赏
  • 举报
回复
C语言不是强类型的. 而C++是强类型的 gcc是c语言, 而VC中是C++. 不知然否
mujiok2003 2014-07-31
  • 打赏
  • 举报
回复
VC++ 2013
C:\demo\test>type test.cpp
#include <stdio.h>
int main()
{
  int *p=NULL;
   void * p1=NULL;
   p = p1;
  return 0;
}
//C
C:\demo\test>cl /nologo /TC test.cpp
test.cpp

//C++
C:\demo\test>cl /nologo /TP test.cpp
test.cpp
test.cpp(6) : error C2440: '=' : cannot convert from 'void *' to 'int *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast

C:\demo\test>

mujiok2003 2014-07-31
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
加上强制类型转换就可以了。
神奕 2014-07-31
  • 打赏
  • 举报
回复
在C语言中,void指针可以直接赋给其他类型的指针,如int *, char *等。但在C++中,void指针必须要明确地进行类型转换。(比如malloc函数返回值为void *类型)

    void *vptr;  
    int *iptr = vptr; // C++中必须用int *iptr = (int *)vptr;  
707wk 2014-07-31
  • 打赏
  • 举报
回复
引用 13 楼 Adol1111 的回复:
引用 9 楼 zxh707wk 的回复:
[quote=引用 8 楼 Oringe_new 的回复:] 看样子卤煮是在VS直接创建项目 生成了CPP项目了 把CPP的后缀名换成C看看
都说了是VC了嘛
VC何时成为一种语言了?[/quote]编译环境
cyd54454 2014-07-31
  • 打赏
  • 举报
回复
你要用c99,貌似必须加上- -std=c99
cyd54454 2014-07-31
  • 打赏
  • 举报
回复
感觉没什么意义啊- -。必要的时候就明确的类型转换就好了,用编译器去测试某种语言特性很不可取
Adol1111 2014-07-31
  • 打赏
  • 举报
回复
引用 9 楼 zxh707wk 的回复:
引用 8 楼 Oringe_new 的回复:
看样子卤煮是在VS直接创建项目 生成了CPP项目了 把CPP的后缀名换成C看看
都说了是VC了嘛
VC何时成为一种语言了?
Norris_Zhang 2014-07-31
  • 打赏
  • 举报
回复
从来没有VC吧?人家从打有VC那天就叫Visual C++吧?只是习惯称为VC吧?
threenewbee 2014-07-31
  • 打赏
  • 举报
回复
从如何写出编译器可以编译运行的程序角度看待编程语言是非常狭隘的。 我们要看到高级语言语义的表述功能。 void *就是表明一个没有具体类型的指针。如果你想表达这个意思,就用它,如果你想表达别的意思就不用它。 好比你完全可以不用bool char int之类的东西,所有的东西都用byte就可以搞定,为什么要区分那么多类型,就是因为那样高级语言更能用代码表现写程序人的意图。
阿呆_ 2014-07-31
  • 打赏
  • 举报
回复
请用稍微新点vc版本测试后再讨论

69,373

社区成员

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

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