Code Bye

指针变量的定义

在看别人写的程序,有一句如下:
Mat** newCosts = new Mat*[ PY_LVL ];
new定义的对象不是返回的是一个指针吗?怎么会赋值给一个指针的指针呢?没理解
解决方案

10

指针的指针不还是一个指针吗

5

原因是你要访问元素的时候就需要解引用:
Quote: 引用:

指针的指针不还是一个指针吗

这是一个opencv程序,本人截了一段如下:

指针的指针是一个指针,没问题。但是上面这句话new后面,变量类型乘了后面那一部分,感觉这个本人没理解,
希望解释一下,觉得这个是关键问题所在。谢谢!

这个不是乘,是不是一个指针数组。
Mat** newCosts = new Mat*[ PY_LVL ];
new了一个Mat指针的数组,
int** pint = new int*[5];
int* psecondary = new int[2];
*pint = psecondary ;
pint  是int**
*pint 是int*
这种问题本人写代码调一下嘛

10

仅供参考:
//在堆中开辟一个2×3×4×5的4维int数组
#include <stdio.h>
#include <malloc.h>
int ****p;
int h,i,j,k;
void main() {
    p=(int ****)malloc(2*sizeof(int ***));
    if (NULL==p) return;
    for (h=0;h<2;h++) {
        p[h]=(int ***)malloc(3*sizeof(int **));
        if (NULL==p[h]) return;
        for (i=0;i<3;i++) {
            p[h][i]=(int **)malloc(4*sizeof(int *));
            if (NULL==p[h][i]) return;
            for (j=0;j<4;j++) {
                p[h][i][j]=(int *)malloc(5*sizeof(int));
                if (NULL==p[h][i][j]) return;
            }
        }
    }
    for (h=0;h<2;h++) {
        for (i=0;i<3;i++) {
            for (j=0;j<4;j++) {
                for (k=0;k<5;k++) {
                    p[h][i][j][k]=h*60+i*20+j*5+k;
                }
            }
        }
    }
    for (h=0;h<2;h++) {
        for (i=0;i<3;i++) {
            for (j=0;j<4;j++) {
                for (k=0;k<5;k++) {
                    printf(" %3d",p[h][i][j][k]);
                }
                printf("\n");
            }
            printf("--\n");
        }
        printf("=======================\n");
    }
    for (h=0;h<2;h++) {
        for (i=0;i<3;i++) {
            for (j=0;j<4;j++) {
                free(p[h][i][j]);
            }
            free(p[h][i]);
        }
        free(p[h]);
    }
    free(p);
}
//   0   1   2   3   4
//   5   6   7   8   9
//  10  11  12  13  14
//  15  16  17  18  19
//--
//  20  21  22  23  24
//  25  26  27  28  29
//  30  31  32  33  34
//  35  36  37  38  39
//--
//  40  41  42  43  44
//  45  46  47  48  49
//  50  51  52  53  54
//  55  56  57  58  59
//--
//=======================
//  60  61  62  63  64
//  65  66  67  68  69
//  70  71  72  73  74
//  75  76  77  78  79
//--
//  80  81  82  83  84
//  85  86  87  88  89
//  90  91  92  93  94
//  95  96  97  98  99
//--
// 100 101 102 103 104
// 105 106 107 108 109
// 110 111 112 113 114
// 115 116 117 118 119
//--
//=======================
//

5

《牛肉干》
C语言上机课,某女同学偷偷吃起牛肉干。
有一粒牛肉干掉到了键盘上,卡在7和8键之间。
女同学就在键盘上抠啊、抠啊、抠啊……
程序里一行代码变成这个样子:
int *pa=&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&a;
后来的结局是
————程序顺利通过编译,运行结果正确!

5

new Mat*[ PY_LVL ];是定义了一个长度为PY_LVL 的指针数组,所以返回的指针需要Mat** newCosts 类型

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明指针变量的定义