当我创建一个整数指针数组时,我尝试了这个。
int *arr = new int*[10];
这不起作用,但以下工作。
int **arr = new int*[10];
为什么我们需要双指针?当我尊重它时,我必须做以下事情。
cout<<arr[0];
为什么我们不需要*在arr前? 谢谢!
答案 0 :(得分:3)
new int*[10]
分配一个由十个指针组成的数组,它产生一个指向该数组第一个元素的指针。元素类型本身就是一个指针,这就是为什么你最终得到一个指向指针(int
)的指针,即int**
。显然int**
无法转换为int*
,因此您必须使用适当的类型声明arr
。
答案 1 :(得分:1)
你不只是“制作一个整数指针数组”:你动态分配它们。
就像动态分配整数数组一样,你会得到一个指针来访问它们:
int* ptr = new int[5];
当你动态分配一个指向整数的指针数组时,你会得到一个指针来访问它们;由于您的元素类型为int*
,因此添加额外的*
会为您提供int**
:
int** ptr = new int*[5];
至于解除引用,我不太清楚你在问什么,但这就是[]
运算符的工作原理;它将n
添加到指针然后取消引用它:
int* ptr = new int[5];
*(ptr+1) = 42; // identical
ptr[1] = 42; // to this
如果你忘了动态分配,只做一个很好的数组,那就简单了:
int* array[5];
std::cout << array[0];
答案 2 :(得分:0)
此语句是int
的1D数组的表达式int* arr = new int [10]; // pointer to array of 10 int
此语句是int
的2D数组的表达式int** arr = new int* [10]; // pointer to 10 pointers to arrays of 10 int
要填充1D数组,您需要执行此操作...
for (int i = 0; i < 10; i++) {
arr[i] = val; // where val can be any integer
}
要填充2D数组,您需要执行此操作...
int** arr2 = new int*[10];
for (int i = 0; i < 10; i++) {
arr2[i] = new int[10];
for (int j = 0; j < 10; j++) {
arr2[i][j] = val; // where val can be any integer
}
}
变量类型和变量名称之间的*符号是指针的语法。它将类型从 int 更改为int 的指针。