数组指针与指针数组

数组指针与指针数组

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值