template <class T>
bool make2dArray(T ** &x,int numberOfRows,int numberOfColumns) //这里面的x为什么要加引用啊
{
try{
//创建行指针
x = new T * [numberOfRows]; //这里面的T后面为什么要加取值符号*
//为每一行分配空间
for(int i = 0;i < numberOfColumns;i++)
x[i] = new T [numberOfColumns];
return true;
}
catch(bad_alloc){return false;}
}
问题
x为什么要加引用啊
引用是什么?
加引用是表明x是一个T**
类型的左值引用,绑定到实参,代表实参别名,所有对x的修改本身,都会体现到实参上。
如果不是传T** &x
而是T** x
,那么你后面对x重新赋值是不会影响实参的。只有修改x所指向的空间,才是跟实參共享的。
T后面为什么要加取值符号?
这里的并不是取值,而是表示T*
(T类型指针),后面[numberOfRows]代表要new的是一个数组,元素个数是是numberOfRows。
也就是说,让x指向new出来的T*
数组。