int **p
表示一个指向指针的指针。具体来说,p
是一个指针,它指向另一个指针,而这个指针又指向一个整数值。
这种结构通常用于处理多级指针,可以用来表示二维数组、指向指针数组的指针等复杂数据结构。例如,可以通过 int **p
来表示一个指针数组的指针,其中每个指针指向一个整型值或者指向整型值的数组。
#include <stdio.h>
int main() {
int row = 3;
int col = 4;
// 分配内存给二维数组
int **arr = (int **)malloc(row * sizeof(int *));
for (int i = 0; i < row; ++i) {
arr[i] = (int *)malloc(col * sizeof(int));
}
// 填充二维数组
int count = 0;
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
arr[i][j] = ++count;
}
}
// 输出二维数组的内容
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
// 释放内存
for (int i = 0; i < row; ++i) {
free(arr[i]);
}
free(arr);
return 0;
}
int *p[10]
表示一个包含有10个指向整型数据的指针的数组。它是一个指针数组,每个指针指向一个整型数据。
#include <stdio.h>
int main()
{
int a[]={1,2,3,4,5};
int *p[5];
for(int i=0;i<5;++i)p[i]=&a[i];
for(int i=0;i<5;++i)printf("%d ",*p[i]);
return 0;
}
int (*p)[10]
表示一个指向包含有10个整数的数组的指针。常用于指向多维数组的指针,特别是二维数组。
#include <stdio.h>
int main() {
int arr[3][10] = {
{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}
};
int (*p)[10]; // 定义一个指向包含有10个整数的数组的指针
// 将指针指向二维数组的第一行
p = arr;
// 输出二维数组的内容
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 10; ++j) {
printf("%d ", p[i][j]); // 或者使用 *(*p + i*10 + j)
}
printf("\n");
}
return 0;
}