1.数组指针和指针数组
1.数组指针
概念:数组指针是指向数组的指针。 特点:
一维数组指针:
语法: 数据类型 (*指针变量名) 【数据变量】 案例: //数组指针:指向数组的指针
#include <stdio.h>
int main()
{
//先有数组,再有指针
int arr[3]={1,2,3};
int len = sizeof arr / sizeof arr[0];
//定义一个指针
//数组指针的语法:数据类型(*指针变量名)[数据容量]
int (*p)[3] = &arr;
printf("%p\n",p);
//p++;
//printf("%p\n",p);
printf("%d\n",(*p)[2]);
for(int i = 0;i < len; i++)
{
printf("%d\n",(*p)[i]);
}
printf("\n");
return 0;
}
二维数组指针
案例: //二维数组指针案例
#include <stdio.h>
int main()
{
//数组指针:先有数组,后有指针
int arr[][3] = {{10,20,30},{100,200,300},{1000,2000,3000}};
//创建一个数组指针,指向二位数组
//int (*p)[3] = &arr;
//p[0]--->{10,20,30},p[1]--->{100,200,300},也就是说:p[0] = 元素10的首地址
int (*p)[3] = arr;//arr等价于&arr[0],p[0] = 元素10的首地址
//获取元素10?
printf("%d\n",(*p)[0]);//arr[0][0]
//获取元素2000?
printf("%d,%d,%d\n",*(*(p+2)+1),*(p[2]+1),(p[2][1]));
//arr[i][j] ===> *(*(p+i)+j) ===> *(p[i]+j) ===>p[i][j]
return 0;
}
指针和数组中符号优先级:( )>[ ]>*
2.指针数组
概念:指针数组是一个数组,数组中的每一个元素都是一个指针。 特点:
先有指针,后有数组 指针数组的本质是一个数组,只是数组中的元素类型为指针 语法: 数据类型 * 数组名【容量】 案例:
//指针数组
#include <stdio.h>
int main()
{
//定义三个变量
int a = 10, b = 20, c =30;
//定义指针数组,指针数组用来存放指针(变量或者常量的内存地址)
int *arr[3] = {&a,&b,&c};
//获取数组大小
int len=sizeof arr / sizeof arr[0];
//遍历数组
for(int i =0;i<len;i++)
{
printf("%3d",*(arr[i]));//输出每个指针所指向的值,需要解引用
}
printf("\n");
return 0;
}