在C语言中,数组名代表数组中首元素的地址,所以,下面两句获取数组的首地址是等价的:

#include<stdio.h>

int  main()
{
int a[5]={1,2,3,4,5};
int *p=&a[0];
int *p2=a;
printf("地址p=%p\n",p);
printf("地址p2=%p",p2);
return 0;
}

输出结果:

地址p=000000000061FDF0
地址p2=000000000061FDF0

根据指针地址偏移,可以打印数组

#include<stdio.h>

int  main()
{
int a[5]={1,2,3,4,5};
int *p=&a[0];
int *p2=a;
printf("地址p=%p\n",p);
printf("地址p2=%p\n",p2);
printf("打印数组:\n");
for(int i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
printf("%d",*(p+i));//带上*表示取该地址的值
}
return 0;
}

输出结果:

地址p=000000000061FDF0
地址p2=000000000061FDF0
打印数组:
12345

使用指针访问数组的效率是远远大于数组下标的访问效率。

也可以通过下面方法,将指针当作数组面名,通过下标法来访问:

#include<stdio.h>

int  main()
{
int a[5]={1,2,3,4,5};
int *p=&a[0];
int *p2=a;
printf("地址p=%p\n",p);
printf("地址p2=%p\n",p2);
printf("打印数组:\n");
for(int i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
printf("%d",p[i]);//像数组一样访问
}
return 0;
}

也可以通过下面的方法:

#include<stdio.h>

int  main()
{
int a[5]={1,2,3,4,5};
int *p=&a[0];
int *p2=a;
printf("地址p=%p\n",p);
printf("地址p2=%p\n",p2);
printf("打印数组:\n");
for(int i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
printf("%d",*(a+i));//数组++
}
return 0;
}

但是不能对数组名++,编译会发生错误

#include<stdio.h>

int  main()
{
int a[5]={1,2,3,4,5};
int *p=&a[0];
int *p2=a;
printf("地址p=%p\n",p);
printf("地址p2=%p\n",p2);
printf("打印数组:\n");
for(int i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
printf("%d",*a++);//数组++,会发生编译错误
}
return 0;
}

数组++是禁止的,因为++相当于更改数组的地址,而数组地址是固定的,是一个常量,对它进行++操作是不允许的。

并且,在操作系统中,都用8个字节来表示一个地址:

#include<stdio.h>
int main()
{
printf("整型指针:%d\n",sizeof(int *));
printf("字符型指针:%d\n",sizeof(char *));
printf("浮点型指针:%d\n",sizeof(float *));
return 0;
}

输出结果:

整型指针:8
字符型指针:8
浮点型指针:8

最新文章

  1. ArcGIS AddIN开发之自定义鼠标样式
  2. this 指向
  3. ORA-01653:表空间扩展失败的问题
  4. MemberwishClone学习
  5. iOS7 UIKit动力学-碰撞特性UICollisionBehavior 上
  6. Linux lsof命令详解和使用示例【转】
  7. C语言开发工具
  8. iOS 程序初始一个带导航栏的视图
  9. java_JDBC(4)
  10. 【openstack N版】——镜像服务glance
  11. [leetcode-593-Valid Square]
  12. Treap详解
  13. Android中与task相关的几个属性
  14. [译文]Domain Driven Design Reference(四)—— 柔性设计
  15. (二叉树 BFS) leetcode513. Find Bottom Left Tree Value
  16. IOS https抓包及10.3.3版本证书不生效问题解决
  17. Linux下more命令C语言实现实践 (Unix-Linux编程实践教程)
  18. 前端常用功能记录(三)—datatables表格初始化
  19. python3解析库pyquery
  20. warshall-floyd算法:POJ No 2139 Six Degress of Cowvin Bacon(任意两点最短路径))

热门文章

  1. R数据分析:用R建立预测模型
  2. 【ASP.NET Core】在Blazor中获取 HTTP 上下文信息
  3. Windows编程之线程
  4. java的URI和URL的关系
  5. spring native 初体验实现 小米控制美的空调
  6. Netty 学习(三):通信协议和编解码
  7. 【问题解决】Debian更新源提示InRelease已过期
  8. 从nuxt开始的SEO之路
  9. 一文搞定 Spring事务
  10. 关于windows-server-下MySQL Community版本的的安装与配置