void*作为函数返回类型(C语言)_void返回值类型返回的是什么_Mye_Strive的博客-CSDN博客
C语言 --- void的用法解析_c语言_浮云流响-华为云开发者联盟
void* 简介
在c 常常会碰到void* 的相关问题,我们这里先说结论,void* 是说任意类型,可以返回任意类型,也可以接受任意类型,但是在确定什么类型之后就必须要进行强制转换。
void*不是空,也不是不返回,而是返回一个无类型,也可以叫任意类型的指针,重点是指针
void*作为返回值使用
#if 1
void RetInt(int a) //void 没有返回值
{
printf("void RetInt(int a) : %d\n",a);
return;
}
void* RetunInt(int *a) // void* 返回的是 int *
{
printf("void* RetunInt(int *a) : %d\n", *a);
return a;
}
void* ReturnChar(char* a)// void* 返回的是char *
{
printf("void* ReturnChar(char*) : %s\n", a);
return a;
}
int main()
{
int a = 10;
int *n; // 返回值RetunInt(int* );
char str[15] = "test_void*";
char *strp; // 返回值 void* ReturnChar(char* a)
RetInt(a);
printf("================================= \n");
n = (int*)RetunInt(&a);
printf("RetunInt(&a) : %d\n",*n);
printf("================================= \n");
strp = (char*)ReturnChar(str);
printf("void* ReturnChar(char* a)) : %s\n", strp);
system("pause");
return 0;
}
# endif
void*作为参数使用
.void型指针作为形参传递后,在子函数内可以被转换成任意类型解引用,如下:A结构体类型的void指针
先强制转换为int *,再转换为A *。
typedef struct
{
int m;
struct arg
{
int a;
int b;
int c;
} arg;
} A;
void func(void *p)
{
int *a; // 第一个void * 当成了int *
a = (int*)p;
printf("打印地址 func----: %p\n",a);
printf("输出 a== %d\n",*a);
printf("********************************************** \n");
A*b; // void * p 当成了A 结构体类型
b = (A*)p;
printf("打印地址 func----: %p, %p, %p, %p\n,", &b->m,&b->arg.a, &b->arg.b, &b->arg.c);
printf("输出 结构体的值 %d, %d, %d, %d\n", b->m, b->arg.a, b->arg.b, b->arg.c);
}
int main()
{
A model;
model.m = 10;
model.arg.a = 11;
model.arg.b = 121;
model.arg.c= 1;
// void * 使用参数
func((void*)&model);
return 0;
}
代码:
#if 1
void RetInt(int a) //void 没有返回值
{
printf("void RetInt(int a) : %d\n",a);
return;
}
void* RetunInt(int *a) // void* 返回的是 int *
{
printf("void* RetunInt(int *a) : %d\n", *a);
return a;
}
void* ReturnChar(char* a)// void* 返回的是char *
{
printf("void* ReturnChar(char*) : %s\n", a);
return a;
}
typedef struct // test void* 做参数
{
int m;
struct arg
{
int a;
int b;
int c;
} arg;
} A;
void func(void *p)
{
int *a; // 第一个void * 当成了int *
a = (int*)p;
printf("打印地址 func----: %p\n",a);
printf("输出 a== %d\n",*a);
printf("********************************************** \n");
A*b; // void * p 当成了A 结构体类型
b = (A*)p;
printf("打印地址 func----: %p, %p, %p, %p\n,", &b->m,&b->arg.a, &b->arg.b, &b->arg.c);
printf("输出 结构体的值 %d, %d, %d, %d\n", b->m, b->arg.a, b->arg.b, b->arg.c);
}
int main()
{
A model;
model.m = 10;
model.arg.a = 11;
model.arg.b = 121;
model.arg.c= 1;
// void * 使用参数
func((void*)&model);
printf("================================= \n");
int a = 10;
int *n; // 返回值RetunInt(int* );
char str[15] = "test_void*";
char *strp; // 返回值 void* ReturnChar(char* a)
RetInt(a);
printf("================================= \n");
n = (int*)RetunInt(&a);
printf("RetunInt(&a) : %d\n",*n);
printf("================================= \n");
strp = (char*)ReturnChar(str);
printf("void* ReturnChar(char* a)) : %s\n", strp);
system("pause");
return 0;
}
# endif