在看别人写的程序,有一句如下:
Mat** newCosts = new Mat*[ PY_LVL ];
new定义的对象不是返回的是一个指针吗?怎么会赋值给一个指针的指针呢?没理解
Mat** newCosts = new Mat*[ PY_LVL ];
new定义的对象不是返回的是一个指针吗?怎么会赋值给一个指针的指针呢?没理解
解决方案
10
指针的指针不还是一个指针吗
5
原因是你要访问元素的时候就需要解引用:
这是一个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;
后来的结局是
————程序顺利通过编译,运行结果正确!
C语言上机课,某女同学偷偷吃起牛肉干。
有一粒牛肉干掉到了键盘上,卡在7和8键之间。
女同学就在键盘上抠啊、抠啊、抠啊……
程序里一行代码变成这个样子:
int *pa=&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&a;
后来的结局是
————程序顺利通过编译,运行结果正确!
5
new Mat*[ PY_LVL ];是定义了一个长度为PY_LVL 的指针数组,所以返回的指针需要Mat** newCosts 类型