指向数组的指针

简介: 以下是 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

相关文章
|
19天前
|
存储 编译器 C语言
函数指针&&数组指针&&数组传参的本质&&字符指针(进阶篇)
函数指针&&数组指针&&数组传参的本质&&字符指针(进阶篇)
|
7天前
|
存储 人工智能 C++
【重学C++】【指针】详解让人迷茫的指针数组和数组指针
【重学C++】【指针】详解让人迷茫的指针数组和数组指针
26 1
|
7天前
|
存储 C语言
指针数组作为main函数的形参
指针数组作为main函数的形参
12 0
|
19天前
|
C语言
指针数组以及利用函数指针来实现简易计算器及typedef关键字(指针终篇)
指针数组以及利用函数指针来实现简易计算器及typedef关键字(指针终篇)
|
26天前
|
编译器
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)3
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)
|
26天前
|
编译器
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)2
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)
|
26天前
|
C语言
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)1
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)
175 51
|
1月前
|
存储 程序员 C++
指针数组和多重指针
指针数组和多重指针
17 2
|
1月前
|
存储 程序员 C++
使用字符指针变量和字符数组的比较
使用字符指针变量和字符数组的比较
15 1
|
1月前
|
存储 安全 Java
防止数组元素的指针被修改
防止数组元素的指针被修改
14 1