我的类Graph的构造函数:
template <typename T>
Graph<T>::Graph(T ** input)
{
graphData = input;
}
当我尝试使用二维数组而不是int **
来创建此类的新实例时int intArray[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
Graph<int>* IntGraph = new Graph<int>(intArray);
我收到了错误cannot convert parameter 1 from 'int [3][3]' to 'int **
我是c ++的新手,我认为这些类型是兼容的。你能告诉我差异吗?
编辑: 由于这个问题被标记为重复,我还想问一下,将这些类型中的一种转换为另一种类型的最佳方法是什么,或者在不损失性能的情况下使用什么
答案 0 :(得分:2)
int [3][3]
在表达式中被转换为极少数例外(例如,在sizeof运算符中使用时)int ( * )[3]
。
int ( * )[3]
是指向类型为int[3]
的数组的指针,而int **
是指向int *
类型的对象的指针
考虑以下示例
int a[3][3];
int ( *pa )[3] = a;
int * b[3];
int **pb = b;
或者你可以写的最后一个声明,如
int * ( *pb ) = b;
在此示例中,指针pa
使用二维数组a
的第一个元素的地址进行初始化。二维数组的元素是一维数组。
指针pb
也由数组b
的第一个元素的地址初始化。数组的元素是int *
类型的对象。
您无法将其中一种转换为另一种类型。
答案 1 :(得分:0)
你不能将int [] []转换为int **,因为在你的大小为2 * 3的情况下int [] []是一个连续的内存块,而int **需要一个指向int的指针。
AFIK。你可以这样做:
<section>
<div class="container">
<div class="gallery-flex">
<div class="owner-pic">
<h2>Meet The Director</h2>
<img src="images/gallery/me4.jpg" alt="#">
<p>Some text and shit more text and shit</p>
</div>
<h2>Here are some photos of the cars we have cleaned.</h2>
<div class="pic1">
<img src="images/gallery/cleaning-car01.png" alt="#">
</div>
<div class="pic2">
<img src="images/gallery/cleaning-car02.jpg" alt="#">
</div>
<div class="pic3">
<img src="images/gallery/cleaning-car03.jpg" alt="#">
</div>
<div class="pic4">
<img src="images/gallery/cleaning-car04.jpg" alt="#">
</div>
<div class="pic5">
<img src="images/gallery/cleaning-car05.jpg" alt="#">
</div>
</div> <!--section-flex!-->
</div><!--container!-->
</section>