c/c++学习--------->数组

一.数组安静

1. 数组名是一个常量,原因是在申请内存的时候就已经固定了,内存空间一旦固定,数组名就不能修改。

2. 数组首元素的地址和数组地址是两个不同的概念,例如:int a[200]={0}; a代表的是数组首元素的地址,&a代表的是数组地址, a+1跳向数组的下一个元素,步长为4;&a+1的步长是 ( sizeof(int) * 200)。

3. 数组首元素的地址和数组地址相同。

4.数组类型

typedef int (ArrayType)[5];

ArrayType myArray;   <====>   int myArray[5];

5.指针数组(数组里面存放的是指针)其实数组指针和指针数组看()和[]的优先级,()和[]优先级一样高,但是结合性从左到右,谁写在左边,谁的优先级高。

char *buf[] = {"aaaaa", "fdfsdf", "23432"};  //数组里面存放的指针(指针数组)

6.数组指针(数组指针用于指向一个数组)

typedef int (ArrayType)[5]; //第一种方法

ArrayType myArray;//相当于一级指针

ArrayType *pArray;

pArray = &myArray;//一级指针取地址赋值,pArray 是二级指针

(*pArray)[i] = i;//使用时先还原成一级指针  //指针指向一个数组(数组指针)


typedef int (*pArrayType)[5]; //第二种方法

pArrayType pArray;

int c[5];

pArray = &c;


int (*pMyArray)[5];//直接定义

int c[5];

pMyArray = &c;

7.多维数组本质

多维数组的本质就是数组指针(指向一维数组的指针),步长是往后跳一维的长度。

int a[3][5];

a 和 a+1 相差 ( 5*sizeof(int) )个字节,步长为 ( 5*sizeof(int) )个字节。

(a+i) 代表第i行的地址

*(a+i) 代表第i行首元素的地址

*(a+i) + j 代表第i行第j个元素的地址 <====> &a[i][j]

*(*(a+i) + j)代表第i行第j个元素的值 <====> a[i][j]

推演:a[i] ===> a[0+i] ===> *(a+i)

a[i][j] ===> a[0+i][j] ===> *(a+i)[j] ===> *(a+i)[0+j] ===> *(*(a+i) + j)

a就是指向第i行的地址。

8.多维数组做函数参数退化问题:

char a[30] ====> char *a; char *a[30] ====> char **a; char a[10][30] ====> char (*a)[30];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值