蓝祁子yoky头像
关注

C++学习日记 Day3:指针与数组-语法区分

## 学习内容

学习C++指针与一维数组以及二维数组之间的联系。

## 指针与一维数组

引用数组元素有两种方法:下标法和指针法。

通过指针引用一维数组;

int a[10];

int *p;

①通过使用&运算符获取数组中元素的地址:

p=&a[0];

p就指向a数组的第0号元素。

  a代表首元素的地址, a+i是地址,*(a+i )是值 ==  a[i] 。

②将数组名赋给指针:

p=a; 

当数组名在传参、赋值给指针变量的时候,数组名会自动退化成数组首元素的地址(int * 一个指针)。

 p=a; 等价于 p=&a[0];  

** 重要区分 **

  • a:首元素地址,类型int *;
  • &a:取整个数组的地址,类型是数组指针int (*)[10],不会退化。
  • &a[0]:取第0号元素的地址,类型int *;

打印输出数字一样,但类型不一样:

  • a+1和&a[0]+1:向后移动1个int,指向a[1];
  • &a+1:向后移动10个int,直接跳到数组末尾外。

** 取数组的值 **

*p=a[0];

区分:

p=a;  p=&a[0];   //地址

*p=a[0]; //值

## 指针与二维数组

int arr[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};

int *p;

p=arr[0]; 

arr[0]是二维数组的第0行的这个一维数组的数组名,在传参、赋值给指针变量的时候,数组名会自动退化成数组首元素的地址(int * ),&arr[0][0],等价于p=&arr[0][0],p指向 arr[0][0] 的地址。

** 重点区分 **

  • 二维数组名 arr :退化&arr[0],类型:int (*)[4] 一行地址,arr+1跳下一行,不能用p接,p是单个指针接不了一行地址。
  • 二维数组第0行的一维数组名arr[0]:退化&arr[0][0],类型int *,arr[0]+1跳本行下一个元素。
  • &arr:取整个二维数组的地址,不会退化 ,类型int (*)[3][4],&arr+1 跳过整个二维数组。

*(arr+n) 等价于 arr[n] 例:*(arr+0) 等价于 arr[0]。(*解引用)

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2201_75293893/article/details/166367716

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--