数组与指针

1.一维数组

int array[5]={1,2,3,4,5};
int *ap = array + 2​
array + 1
&array + 1

一维数组名的值是一个指针常量,它的类型是"指向元素类型的指针",它指向数组的第一个元素。 

数组名+1,是+数组元素大小的字节数;数组名的地址+1,是+整个数组大小的字节数。

ap = array+2 = &array[2]
*ap = array[2] = *(array+2) = ap[0] = *(ap+(0)) = array[2]
ap+6 = array+8 = &arrY[8]
*ap+6 = array[2]+6
*(ap+6) = array[8] = ap[6]
ap[-1] = array[1]

C的下标引用和间接访问表达式是一样的。 

int array[5]={1,2,3,4,5};
cout<<*(*(&array+1)-1);

会输出什么?

这道题答案是5。

解析:

*(*(&array+1)-1)里,
&array是取array的地址;
&array+1就是在array的地址的基础上向前跑4*5个字节;
*(&array+1)就是在数组末尾再往后一个字节的地址;
*(&array+1)-1就是数组末尾的地址;
*(*(&array+1)-1)就是数组末尾的那个元素。

2.多维数组

int a;
int b[10];
int c[6][10];
int d[3][6][10];

a是简单的整数。

b是一个向量,它包含10个整型元素。

c是一个包含6个元素的向量,只不过它的每个元素本身是一个包含10个整型元素的向量。c是个一维数组的一维数组。

d是一个包含3个元素的数组,每个元素都是包含6个元素的数组,而这6个元素中的每一个又都是包含10个整型元素的数组。

int matrix[3][10]

matrix:它的类型是“指向包含10个整型元素的数组的指针”,指向包含10个整型元素的第一个子数组。

matrix + 1:它是一个“指向包含10个整型元素的数组的指针”” ,但它指向matrix的另一行。

*(matrix + 1):它的类型是“指向整型的指针”,指向第二排的第一个元素

*(matrix + 1) + 5:它是一个指向整型值的指针,它指向的位置比上一个表达式指向的位置向后偏移5个整型元素。

*(*(matrix + 1) + 5):它是一个整型元素,相当于matrix[1][5]

int  matrix[3][10]
int  (*p)[10] = matrix

p是指向整型数组的指针,是一个指向拥有10个整型元素的数组的指针。

数组作为函数参数

#一维数组
int vector[10];
void func1(int *vec);
void func1(int vec[]);
#多维数组
int matrix[3][10]
void func2(int (*mat)[10]);
void func2(int mat[][10]);

3.指针数组(二重指针)

int *api[10];

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值