void *作为形参

    技术2025-10-31  4

    1.结构体内嵌结构体时,内嵌结构体成员与结构体其它成员依次存储,地址连续 2.void型指针作为形参传递后,在子函数内可以被转换成任意类型解引用,如下:DQP结构体类型的void指针 先强制转换为int *,再转换为DQP *。

    #include <stdio.h> #include <stdlib.h>

    typedef struct {     int dp;     struct arg     {         int arg_w;         int arg_h;         int arg_f;     }arg; }DQP;

    void func(void *p) {     int *a;     DQP *b;          a=(int *)p;         printf("<func>%p\n",a);     printf("a=%d\n",*a);          b=(DQP *)p;         printf("dp=%d,w=%d,h=%d,f=%d\n",             b->dp,b->arg.arg_w,b->arg.arg_h,b->arg.arg_f);     printf("<func>%p,%p,%p,%p\n",             &b->dp,&b->arg.arg_w,&b->arg.arg_h,&b->arg.arg_f);     }      int main(int argc,char **argv) {         DQP mode1;     mode1.dp=5;     mode1.arg.arg_w=10;     mode1.arg.arg_h=15;     mode1.arg.arg_f=20;          printf("<main>%p,%p,%p,%p\n",     &mode1.dp,&mode1.arg.arg_w,&mode1.arg.arg_h,&mode1.arg.arg_f);     func((void *)&mode1);          return 0; }

    输出:

    <main>0x7ffd114325e0,0x7ffd114325e4,0x7ffd114325e8,0x7ffd114325ec <func>0x7ffd114325e0 a=5 dp=5,w=10,h=15,f=20 <func>0x7ffd114325e0,0x7ffd114325e4,0x7ffd114325e8,0x7ffd114325ec

    Processed: 0.009, SQL: 9