指向数组的指针

简介: 以下是 int a[5],以及其各个元素的地址a[0] 0019FF1C a[1] 0019FF20a[2] 0019FF24a[5] 0019FF28a[4] 0019FF2C

指向数组的指针

以下是 int a[5],以及其各个元素的地址

a[0] 0019FF1C

a[1] 0019FF20

a[2] 0019FF24

a[5] 0019FF28

a[4] 0019FF2C

首元素地址:

a即为a数组首个元素地址,也就是数组元素a[0]的地址

则,a+1为数组元素a[1]的地址。。。

以此类推a+4则为数组元素a[4]的地址

整个数组的地址:

那么&a,代表什么呢?

C语言规范文档规定

当数组名出现在取地址符&后面时,返回一个指向数组的指针(地址)。

!注意是指向数组的指针,不是数组元素的指针

(将数组作为一个整体来处理)

那么&a+1,就是下一个数组单元的地址,也就是上图a[4]地址后的地址

需要注意a与&a值虽然相同但是含义不同

int *p;可以用p储存a,也就是数组元素a[0]的地址

那么用什么来储存&a呢?

我们可以这样理解

先定义一个数组int [5];作为一个基类型

在将指针变量看作一个整体(*p)

这样就定义好一个指向数组的指针

Int (q)[5];

q=&a;

整个数组作为q的操作对象
加括号的原因是因为优先级()>[]>
,那么不加括号就变成了指针数组了

代码如下

#include"stdio.h"
int main(){
  int a[5];
  int (*p)[5];
  p=&a;
  printf("%p\n",a);
  printf("%p\n",a+1);
  printf("%p\n",a+2);
  printf("%p\n",a+3);
  printf("%p\n",a+4);
  printf("%p\n",a+5);//观察数组后的地址
  printf("----------------\n");
  printf("%p\n",p);
  printf("%p\n",p+1);
  return 0;
}

运行结果

2345_image_file_copy_3.jpg

相关文章
|
1月前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
33 3
|
1月前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
38 2
|
1月前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
37 1
|
2月前
|
存储
如何使用指针数组来实现动态二维数组
指针数组可以用来实现动态二维数组。首先,定义一个指向指针的指针变量,并使用 `malloc` 为它分配内存,然后为每个子数组分配内存。通过这种方式,可以灵活地创建和管理不同大小的二维数组。
|
2月前
|
存储
如何通过指针数组来实现二维数组?
介绍了二维数组和指针数组的概念及其区别,详细讲解了如何使用指针数组模拟二维数组,包括定义与分配内存、访问和赋值元素、以及正确释放内存的步骤,适用于需要动态处理二维数据的场景。
|
2月前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
2月前
魔法指针 之 二级指针 指针数组
魔法指针 之 二级指针 指针数组
20 1
|
2月前
|
存储
一篇文章了解区分指针数组,数组指针,函数指针,链表。
一篇文章了解区分指针数组,数组指针,函数指针,链表。
20 0
|
2月前
|
编译器 C语言
【C语言】指针篇-深入探索数组名和指针数组- 必读指南(2/5)
【C语言】指针篇-深入探索数组名和指针数组- 必读指南(2/5)
|
4月前
|
搜索推荐 C语言
指针与数组
指针与数组
59 9