首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

VOID*的学习,有关问题很多

2012-03-16 
VOID*的学习,问题很多。#includestdio.hchar* aa(void)//当返回值和形参是都是无的意思,void*是指针表示

VOID*的学习,问题很多。
#include<stdio.h>
char* aa(void)//当返回值和形参是都是无的意思,void*是指针表示指向任意的类型的数据。
{
char* x=NULL;
char g=10;
x=&g;
printf("c-=====\n");
return x;
}
int main(void)
{
char a[12];
  void* y;
 puts("input: ");
scanf("%s",a);
printf("%s\n",a);
y=aa();//不能将VOID* 转换为char* 大转小不能分 小转大可以;
printf("%d",*((int*)y));//这句话报错了。
return 0;
}

[解决办法]
y = (void*)aa();
另外aa函数返回的是栈上分配的变量g的地址
出了aa函数g已经释放了
你不应该去获取这个地址里的值
[解决办法]
void *指针只有几个有限的操作:
1、与另一个指针进行比较
2、向函数传递void *指针或从函数返回void *指针
3、给另一个void *指针赋值
另外,绝对不允许使用void *指针操纵它所指向的对象

楼主可以试试 static_cast<>,当编译器不会试图做自动转换的时候,这种显式转换有时候很有用的。
比如:

C/C++ code
char *ch = static_cast<char *>(y); printf("%d",*ch);
[解决办法]
C/C++ code
#include<stdio.h>char g=10;char* aa(void)//当返回值和形参是都是无的意思,void*是指针表示指向任意的类型的数据。{    char* x=NULL;        x=&g;    printf("c-=====\n");    return x;}int main(void){    char a[12];    void* y;    puts("input: ");    scanf("%s",a);    printf("%s\n",a);    y=aa();//不能将VOID* 转换为char* 大转小不能分 小转大可以;    printf("%d",*((int*)y));//    return 0;} 

热点排行