一、指针数组
1、指针数组定义
#include <stdio.h>
int main(void)
{
int a = 10, b = 20, c = 30;
int* arr[3] = { &a,&b,&c };//定义指针数组
for (int i = 0; i <3; i++) {
printf("%d\n", *arr[i] );//这里的arr[]都是指针,所以要加一个*才表示取值
}
printf("指针数组大小:%d\n", sizeof(arr));
printf("指针元素大小:%d", sizeof(arr[2]));
return 0;
}/*10
20
30
指针数组大小:12
指针元素大小:4 */
2、指针数组是一个特殊的二维数组。
#include <stdio.h>
int main(void)
{
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("\n");
}
return 0;
}/*1 2 3
4 5 6
7 8 9*/
第10行代码,arr[ i ] [ j ]的意思:假设 i=0,那么arr[ 0 ]就表示数组a,而再加上[ ]则表示取数组a的值,例如:arr[ 0 ] [ 1 ] == a[ 1 ]== 2。|| 而 *(arr[i] + j))意思是:arr[ 0 ]表示为数组a首元素地址,加上偏移量就是可以找到a数组里面的元素的地址,再加个*则为值。
3 、指针数组相对于二级指针:
int* arr[];
int**p = arr;
二、多级指针
二级指针就是指向一级指针变量地址的指针。
二级指针:
int a = 10, b = 20;
int* p = &a;
int** pp = &p;
三级指针:
int* p = &a;
int** pp = &p;
int*** ppp = &pp
*ppp == pp == &p (二级指针) **ppp == *pp == p == &a(一级指针) ***ppp == **pp == *p == a