本帖最后由 小白学编程 于 2021-5-11 13:07 编辑
指针数组
- int main()
- {
- int a = 10;
- int b = 20;
- int c = 30;
- char* arr[3] = { &a,&b,&c };
- for (int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
- {
- printf("%d \n",*arr[i]);
- }
- printf("指针数组大小%d \n", sizeof(arr));
- printf("指针元素大小%d \n", sizeof(arr[0]));
- return EXIT_SUCCESS;
- }
复制代码
输出结果
10
20
30
指针数组大小1
指针元素大小4
- int a[] = { 1,2,3 };
- int b[] = { 4,5,6 };
- int c[] = { 7,8,9 };
- int* arr[] = { a,b,c };
- for(int i = 0; i < 3;i++ )
- {
- printf("%d\n", *arr[i]);
- }
- for (int i=0;i<3;i++)
- {
- for (int j=0;j<3;j++)
- {
- printf("%d", arr[i][j]);
- }
- printf("\n");
- }
- return EXIT_SUCCESS;
- }
复制代码
读取指针数组元素
int a[] = { 1,2,3 };
int b[] = { 4,5,6 };
int c[] = { 7,8,9 };
int* arr[] = { a,b,c };
printf("%p \n", arr);//读取数组的首地址
printf("%d \n", a[1]); //下标索引为0开始,读取元素下标第一行第2个元素
printf("%d \n", arr[0][1]);//下标索引为0开始,读取元素下标第一行第2个元素
printf("%d \n", arr[1][0]);//下标索引为0开始,读取元素下标第二行第1个元素
printf("%d \n", arr[2][0]);//下标索引为0开始,读取元素下标第三行第1个元素
printf("%d \n", *(a +1));//指针指向数组第一行第一个元素
printf("%d \n", *arr[2]);//指针指向数组第三行第一个元素
- int a[] = { 1,2,3 };
- int b[] = { 4,5,6 };
- int c[] = { 7,8,9 };
- int* arr[] = { a,b,c };
- for (int i=0;i<3;i++)
- {
- for (int j=0;j<3;j++)
- {
- //printf("%d ", arr[i][j]);
- //printf("%d ", *(arr[i] + j));
- printf("%d ", *(*(arr + i) + j));
- }
- }
复制代码
多级指针
int a[] = { 1,2,3 };
int b[] = { 4,5,6 };
int c[] = { 7,8,9 };
int* arr[] = { a,b,c };
//指针数组是一个特殊的二维数组模型
//指针数组和二级指针建立关系
int** p = arr;
printf("%d \n", **p); //对应的是p[0][0]
- int a[] = { 1,2,3 };
- int b[] = { 4,5,6 };
- int c[] = { 7,8,9 };
- int* arr[] = { a,b,c };
- //指针数组是一个特殊的二维数组模型
- //指针数组和二级指针建立关系
- int** p = arr;
- //printf("%d \n", **p); //对应的是arr[0][0]--a[0]
- //printf("%d \n", **(p + 1));//读取第二行第一个元素
- //printf("%d \n", *(p + 1));//一级指针加偏移量相当于跳过了一个元素
- //printf("%d \n", *(*p + 1));//arr[0][1]
- printf("%d \n", *(*(p + 1) + 1));//读取第二行第二个元素
- for (int i=0;i<3;i++)
- {
- for (int j=0;j<3;j++)
- {
- printf("%d ", p[i][j]);
- printf("%d ", *(p[i] + j));
- printf("%d ", *(p + i) + j);
- }
- }
复制代码
int a = 10;
int b = 20;
int* p = &a;
int** pp = &p;
int***ppp = &pp;
*ppp == pp == &p;
**ppp == *pp == p == &a;
***ppp == **pp == *p == a; |