数组指针与指针数组
0.开篇语
是不是傻傻分不清数组指针与指针数组?请耐心看完这篇博客,或许可以帮助你理解指针数组与数组指针。
1.预备知识
- 一维数组的定义与初始化
- 二维数组的定义与初始化
- typedef的使用实例
1.1 一维数组的定义与初始化
//定义一个整型的一维数组
//方式1:不指定元素个数,直接进行初始化,数组的大小由初始化数字个数确定
int array[] = {1,2,3,4,5};
//方式2:指定元素个数,同时进行初始化。若初始化个数<元素个数 ,其余元素为
int array[10] ={1,2,3,4,5};
1.2 二维数组的定义与初始化
//定义一个3行4列整型的二维数组
//方式1:定义二维数组,直接以大括号的形式初始化
int array[3][4] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
//方式2:当有初始化参数时,可以不指定第一维的大小
int array[][4] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
//方式3:当有初始化参数时,可以不指定第一维的大小
int array[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
1.3 typedef的使用实例
//想要一次声明两个指针变量,容易犯错。以下例子,ptr1是指针变量,ptr2是int类型
int* ptr1,ptr2;
//此时,可以使用typedef将int* 声明为一种类型
typeder int* INTPTR;
//这里ptr1,ptr2都是int *类型
INTPTR ptr1,ptr2;
2.指针数组
2.1 什么是指针数组?
指针数组
:它是一个数组,里面的每个元素都是指针。
类比记忆:指针数组,重点在于数组
。可以与其他几种数组类比记忆:
- 整型数组:int arr[8];里面每个元素都是整型变量
- 字符数组: char ch[8];里面每个元素都是字符类型
- 指针数组:int* ptrArr[8];里面每个元素都是指针类型
2.2 指针类型的定义
Tips: [ ]比*优先级高
//定义一个指针数组
char* ptrArr[]={"zhu","xin","yu"};
//标准main函数,带参数 char* argv[] 也是指针数组
int main(int argc,char* argv[])
3.数组指针
3.1 什么是数组指针?
数组指针
:它是指针,指向一个数组的指针。
Tips:数组指针,指向一维数组的整个数组,而不是首元素地址。
3.2 数组类型
数组类型
:本质是一种类型,与int、char…类似。基本形式是: 类型[规模]
//将int[10]类型数组,重命名为PTRARR
typedef int PTRARR[10];
3.3 数组指针的定义
3.3.1 先定义数组类型,根据类型定义指针变量
//定义数组类型
typedef int PTRARR[10];
//根据类型定义数组指针
PTRARR* ptrArr = NULL;
//定义 一个int[10]类型的数组变量arr
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//使数组指针ptrArr指向arr
ptrArr = &arr;
3.3.2 先定义数组指针类型,根据类型定义变量
//和指针数组写法很类似,多了()
//() 和 []优先级一样,从左往右
//()有指针,它是一个指针, []
//指向数组的指针,它有typedef,所以它是一个数组指针类型
typedef int(*PTRARR)[10];
PTRARR ptrArr; //数组指针变量
int arr[10]={1,2,3,4,5,6,7,8,9,10};
ptrArr = &a;