为什么用二级指针及其应用

由一个问题引发的思考

一般而言,我见到的,用到的二级指针的地方并不多,典型的应用就是将空指针指向一个确定的空间,进行赋值操作。

初学者往往刚开始会用用一级指针去完成上述操作,但并不对,下面将对两种情况分别说明。

一级指针:

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

void p_test(char* p)
{
    printf("&p=%p\n",&p); //传入的指针地址跟mian中的ptr地址并不相同 
    p = (char*)malloc(sizeof(char));
    *p = 11;
    printf("*p %d\n",*p);
}

int main(int argc, char** argv) {
    
    char *ptr = NULL;
    printf("ptr=%p\n",&ptr);
    p_test(ptr);
    printf("ptr=%p *ptr=%d\n",ptr,*ptr);//打印不出来,因为指向的空间为空 
}

 

二级指针:

 

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

void pp_test(char** p)
{
    printf("&p:%p p:%p\n",&p,p);//p指向mian中的pointer 
    *p = (char*)malloc(sizeof(char));
    **p = 11;
    printf("**p %d\n",**p);
}

int main(int argc, char** argv) {
    
    char *ptr = NULL;
    printf("ptr=%p\n",&ptr);
    pp_test(&ptr);
    printf("*ptr %d\n",*ptr);
}

 

posted @ 2024-05-23 16:27  njit-sam  阅读(13)  评论(0)    收藏  举报