美文网首页
c语言二级指针使用场景

c语言二级指针使用场景

作者: 76577fe9b28b | 来源:发表于2017-02-27 11:24 被阅读402次
模式一: 指针在栈中,指针指向静态常量区的一块内存

注意: 数组的输出都要带上数组里面存放数的个数,不然不知道输出多少个。因为传入参数的时候,数组名会自动变成指向数组的指针,无法通过sizeof获取数组的长度。

void two_point_test1(){
    char * a[] = {"asd","haha","你好"};
    two_point_test1_print(a, sizeof(a)/sizeof(a[0]));
}

//这里的num一定要传
void two_point_test1_print(char **p, int num){

    for (int i = 0; i < num; i++) {
        printf("%s\n", *(p + i));
    }
}
模式二:存放在栈中的二维数组

注意:这种输出不能使用 参数 char **p;因为如果参数数char**p,那么指针的跨度就是sizeof(char *),
而下面要的跨度是6,所有要把6传入参数中。

下面写法错误:
void two_point_test2_print(char **p, int num);

如下写法正确:
void two_point_test2_print(char p[][6], int num);
void two_point_test2_print(char *p[6], int num);

c语言常识: 指针的跨度即为去掉*p以外的sizeof, 上面的跨度为: sizeof(char[6])

void two_point_test2_print(char (*p)[6], int num){

    for (int i = 0; i < num; i++) {
        printf("%s \n", *(p + i));
    }
}
void two_point_test2(){

    char a[3][6] = {"sad","hahah","nimea"};
    two_point_test2_print(a, sizeof(a)/sizeof(a[0]));
}
场景三: 二级指针在栈中,同时指向堆中的一个数组,堆中的数组是一维数组,每一个数组元素指向堆中的一块内存
void two_point_test3_print(char **p, int num){
    
    for (int i = 0; i < num; i++) {
        
        printf("%s\n", *(p + i));
    }
    
}
//释放内存
void two_point_free(char **p, int num){
  
    for (int i = 0; i < num; i++) {
        free(*(p + i));
    }
   
    free(p); 
}

void two_point_test3(){

    char **p = NULL;
    p = calloc(3, sizeof(char *));
    
    for (int i = 0; i < 3; i++) {
        *(p + i) = calloc(10, sizeof(char));
    }
    
    for (int i = 0 ; i < 3; i++) {
        
        char b[10] = {0};
        sprintf(b, "hellow%d", i +1);
        strcpy(*(p + i),b);
    }
    
    two_point_test3_print(p, 3);
    two_point_free(p, 3);
    p = NULL;
}

相关文章

  • c语言二级指针使用场景

    模式一: 指针在栈中,指针指向静态常量区的一块内存 注意: 数组的输出都要带上数组里面存放数的个数,不然不知道...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • 在Swift中使用C语言的指针

    在Swift中使用C语言的指针 在Swift中使用C语言的指针

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • [初学C++]浅谈C C++引用和指针的联系和区别

    为什么C/C++语言使用指针? ①一方面,每一种编程语言都使用指针。不止C/C++使用指针。每一种编程语言都使用指...

  • Go语言-指针

    Go语言中的指针不同于C语言,Go语言的指针使用方法要简单很多。当然和C语言从指针定义到指针的使用都有很大的不同。...

  • C语言基础及指针④函数指针

    接续上篇C语言基础及指针③函数与二级指针 在上一篇中 , 我们学习了函数与二级指针 , 函数和java中的方法类似...

  • ndk02_指针运算,函数参数与指针,数组指针,二级指针

    一、指针运算 二、数组与指针 三、指针和函数参数 四、指针数组 五、 二级指针 六、知识要点 1、C语言中的函数如...

  • 两道面试题所引发的C指针的思考

    C语言是一门使用比较广泛的高级编程语言,而指针则是C语言的精髓所在,可以说学习C语言不会灵活使用指针就谈不上精通C...

  • C语言基础及指针⑤动态内存分配

    接续上篇C语言基础及指针④函数指针 在上一篇我们了解C语言中的函数及函数指针 , 使用函数指针 , 模拟了网络请求...

网友评论

      本文标题:c语言二级指针使用场景

      本文链接:https://www.haomeiwen.com/subject/lnhzwttx.html