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<>,当编译器不会试图做自动转换的时候,这种显式转换有时候很有用的。
比如:
char *ch = static_cast<char *>(y); printf("%d",*ch);
[解决办法]
#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;}