二级指针

void test19() {
    long **p = NULL;
    long l[] = {11, 12};
    *p = &l;// crash, 因为二级指针汇总不允许直接操作一级指针
}


/**
 * 对比test19(),定义的二级指针**p后, 是不能直接操作*p
 */
void test20(){
    long **p = NULL;
    long l[2][2] = {{11, 12},
                    {21,22}};
    p = &l;
    long *tmp = p+1;
    printf("%d",*(tmp+0));
}

/**
 * 1.定义的二级指针**p后, 是不能直接操作*p, 只能操作p
 * 2.操作p时,可以对p直接赋予一个地址; 可如果把p当成数组直接赋值,需要先对p申请内存,否者报错
 * 3.理解二级指针做类二维数组的操作,但是比二维数组更加灵活,可以扩容,可以非矩阵形式即每行元素个数可以不统一
 * 4.对2的理解:指针当成数组操作时必须要先申请合适的内存空间
 */
void test21(){
    long **p = malloc(sizeof(long)*9);
    long *p1=11;
    long *p2 =12;
    p[0] = p1;
    p[1] = p2;
 }

二级指针的常见操作:

定义一个二级指针p

对二级指针分配内存

将一个内存地址分配给p[]的形式

posted @ 2019-07-08 22:51  車輪の唄  阅读(9)  评论(0编辑  收藏  举报  来源