多层指针,地址与传参

    科技2022-07-12  116

    多层指针,地址与传参

    #include <stdio.h> #include <malloc.h> typedef struct Sa{ int S_a; } S , *Sp; void Change(Sp testA, Sp* testB); int main() { printf("Hello, World!\n"); S ss; ss.S_a = 100; Sp ap = malloc(sizeof(S)); ap -> S_a = 110; //一层指针 S * bp = &ss; Sp* bpp = &bp; //二层指针 S ** bpp2 = &bp; bp->S_a = 101; printf("one P to &ss: %p\n", *bp); printf("&bp : %p\n", &bp); printf("bp: %p\n",bp); printf("S ss: %p\n", ss); printf("Sp* bpp: %p\n", bpp); printf("S ** bpp2: %p\n", bpp2); Change(ap, &bp); printf("%d\n",ap->S_a); printf("%d\n",bp->S_a); return 0; } void Change(Sp testA, Sp* testB) { printf("\n*testB : %p\n", *testB); /*->S_a = 123;*/ //这是在原来的形参基础上,改变传入的值为引用类型 /* Sp *changeC = &testP;*/ /* //目前形参的传入方式 Sp changeD = test; //现函数形参的传入,类型为引用 Sp changeE = &test; */ }

    输出结果为:

    Hello, World! one P to &ss: 0000000000000065 &bp : 000000000061FDC8 bp: 000000000061FDD4 S ss: 0000000000000065 Sp* bpp: 000000000061FDC8 S ** bpp2: 000000000061FDC8 *testB : 000000000061FDD4 110 101
    Processed: 0.017, SQL: 8