int **p
时间: 2023-07-11 19:06:57 浏览: 68
这是一个指向指针的指针,可以用来表示一个二维数组。例如,可以用它来动态创建一个二维数组:
```c++
int **p;
int row = 3, col = 4;
p = new int*[row];
for (int i = 0; i < row; i++) {
p[i] = new int[col];
}
```
这样就创建了一个 3 行 4 列的二维数组。注意,在使用完后需要手动释放内存:
```c++
for (int i = 0; i < row; i++) {
delete[] p[i];
}
delete[] p;
```
相关问题
int **p 函数
这是一个函数声明,表示该函数的返回值是一个向指针的指针。该函数可能是用于动态分配二维数组的函数。在函数体内,可以使用类似于 p[i][j] 的方式来访问二维数组的元素。例如:
```
int **create_array(int rows, int cols) {
int **p = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
p[i] = (int *)malloc(cols * sizeof(int));
}
return p;
}
int main() {
int **arr = create_array(3, 4);
arr[1][2] = 5;
printf("%d", arr[1][2]); // 输出 5
return 0;
}
```
注意,使用完二维数组后,需要逐一释放每个指针指向的内存块,最后再释放指向指针的指针所指向的内存块。
int **p;int *p的表达是否正确
int **p; int *p的表达是正确的。
在C语言中,int **p表示一个指向指针的指针,而int *p表示一个指向整型变量的指针。这两种表达方式都是合法的,但它们的含义是不同的。
int **p表示p是一个指向指针的指针,也就是说p存储的是一个指针的地址。而int *p表示p是一个指向整型变量的指针,也就是说p存储的是一个整型变量的地址。
下面是一个示例代码,演示了int **pint *p的用法:
```c
#include <stdio.h>
int main() {
int a = 10;
int *p = &a;
int **q = &p;
printf("a = %\n", a); // 输出:a = 10
printf("*p = %d\n", *p); // 输出:*p = 10
printf("**q = %d\n", **q); // 输出:**q = 10
return 0;
}
```
在这个示例中,我们定义了一个整型变量a,并将其地址赋给指针p。然后,我们定义了一个指向指针的指针q,并将指针p的地址赋给q。通过*q和**q,我们可以访问到变量a的值。