1.二级指针
如何理解呢?
1.pp的类型是int * * ——二级指针类型
2.p指向a,a的类型是int
3.int * * pp 其中 int * 在说明 pp 是指向 p 的类型 int * ,第二个 * 说明 pp 是指针变量
4.p + 1 跳过 4 个字节 , pp + 1 跳过 4 或者 8 个字节(要看对应的指针变量是多少)
由图可见,打印的是一样的
2.指针数组
存放指针的数组
int * arr[]
char * []
double * []
指针数组的每一个元素是地址,又可以指向一块区域
3.指针数组模拟二维数组
其中对于 arr[i][j] 编译器会当作*(*(arr+i)+j) —— 指针运算!
其中所用到的代码如下:
#define _crt_secure_no_warnings 1
#include <stdio.h>
//void Print(int n)
//{
// if (n > 9)
// {
// Print(n / 10);
// }
// printf("%d ", n % 10);
//}
//int main()
//{
// int n = 0;
// scanf("%d", &n);
// Print(n);
// return 0;
//}//int main()
//{
// int a = 10;
// int* p = &a;
// //p是一级指针
// int** pp = &p;
// //pp是二级指针
// printf("%p\n", *pp);
// printf("%p", &a);
// return 0;
//}int main()
{int arr1[] = { 1,2,3,4,5 };int arr2[] = { 2,3,4,5,6 };int arr3[] = { 3,4,5,6,7 };int* arr[] = { arr1,arr2,arr3 };//打印数组int i = 0;for (i = 0; i < 3; i++){int j = 0;for (j = 0; j < 5; j++){printf("%d ", arr[i][j]);}printf("\n");}return 0;
}