1.一维数组指针

1.1 定义

数组指针,即指向数组的指针,对于一维数组char cTestOne[3] = {1, 2, 3},定义指向其的指针:char (*pOneArray)[3] = &cTestOne。

1.2 地址空间

&cTestOne和cTestOnep值相同,但意义不同,前者表示的是整个数组的首地址,后者表示的是数组第一个元素的地址。OneArray+1在地址空间上表示的是增加数组长度的地址,这与char (*pOneArray)[3]中的char类型和[3]长度相关,我们定义char *pOneElement1 = cTestOne,pOneElement1+1在地址空间上表示的是增加数组单个元素长度的地址。

1.3 访问

对于pOneArray,*pOneArray表示的首个元素的地址,**pOneArray则表示首个元素的值;对于pOneElement1 ,其本身表示首个元素的地址,*pOneElement1 表示首个元素的值。

1.4 测试

测试代码:

char cTestOne[3] = {1, 2, 3};//指向一维数组char (*pOneArray)[3] = &cTestOne;//指向数组的第一个元素写法1char *pOneElement1 = cTestOne;//指向数组的第一个元素写法2char *pOneElement2 = &(cTestOne[0]);//地址空间printf("****************Address DisPlay****************\n");printf("&cTestOne        = %p\n",&cTestOne);printf("cTestOne         = %p\n",cTestOne);printf("&(cTestOne[0]    = %p\n",&(cTestOne[0]));printf("pOneArray        = %p\n",pOneArray);printf("pOneElement1     = %p\n",pOneElement1);printf("pOneElement2     = %p\n\n",pOneElement2);//步距测试printf("****************Step Length DisPlay****************\n");printf("&cTestOne + 1    = %p\n",&cTestOne + 1);printf("pOneArray + 1    = %p\n",pOneArray + 1);printf("pOneElement1 + 1 = %p\n",pOneElement1 + 1);printf("pOneElement2 + 1 = %p\n\n",pOneElement2 + 1);//元素访问printf("****************Element Access DisPlay****************\n");printf("*pOneArray          = %p\n",*pOneArray);printf("**pOneArray         = %d\n",**pOneArray);printf("*(*pOneArray + 1)   = %d\n",*(*pOneArray + 1));printf("*pOneElement1       = %d\n",*pOneElement1);printf("*(pOneElement1 + 1) = %d\n",*(pOneElement1 + 1));printf("*(pOneElement2 + 1) = %d\n\n",*(pOneElement2 + 1));

测试结果:

2.二维数组指针

2.1 地址空间

对于二维数组,可以看做一个一维数组,其成员变量也是一维数组;定义char cTestTwo[2][3] = {1, 2, 3, 4, 5, 6},&cTestTwo表示的是整个数组的指针,&cTestTwo + 1步距为6(2乘以3,整个数组的长度);cTestTwo表示第0行的首地址,即cTestTwo[0]的地址,类似于上述章节中一维数组的&cTestOne,其步距为3(每行的长度);*cTestTwo表示的是数组第0个元素的地址,即cTestTwo[0][0]的地址。

2.2 访问

由2.1章节描述,数组第0行地址为cTestTwo,第0个元素地址为*cTestTwo,访问第0行第0个元素即为**cTestTwo;对于第0行第1个元素,即*(*cTestTwo + 1);对于第1行的第0个元素,其行起始地址为(cTestTwo + 1),访问即为*(*(cTestTwo + 1)),对于第1行第1个元素,访问即为*(*(cTestTwo + 1) +  1);总结:访问第M行第N个元素,即*(*(cTestTwo + M) +  N)

2.3 测试

测试代码:

    //指向二维数组char cTestTwo[2][3] = {1, 2, 3, 4, 5, 6};char (*pTwoArray)[2][3] = &cTestTwo;char (*pTwoArrayOneLine)[3] = cTestTwo;//指向数组的第一个元素char *pTwoElement = (*cTestTwo);//地址空间printf("****************Address DisPlay****************\n");printf("&cTestTwo        = %p\n",&cTestTwo);printf("cTestTwo         = %p\n",cTestTwo);printf("*cTestTwo        = %p\n",*cTestTwo);printf("pOneArray        = %p\n",pTwoArray);printf("pTwoArrayOneLine = %p\n",pTwoArrayOneLine);printf("pTwoElement      = %p\n\n",pTwoElement);//步距测试printf("****************Step Length  DisPlay****************\n");printf("&cTestTwo + 1        = %p\n",&cTestTwo + 1);printf("cTestTwo + 1         = %p\n",cTestTwo + 1);printf("*cTestTwo + 1        = %p\n",*cTestTwo + 1);printf("pOneArray + 1        = %p\n",pTwoArray + 1);printf("pTwoArrayOneLine + 1 = %p\n",pTwoArrayOneLine + 1);printf("pTwoElement + 1      = %p\n\n",pTwoElement + 1);//元素访问printf("****************Element Access DisPlay****************\n");printf("**cTestTwo                        = %d\n",**cTestTwo);printf("*(*cTestTwo + 1)                  = %d\n",*(*cTestTwo + 1));printf("*(*(cTestTwo + 1))                = %d\n",*(*(cTestTwo + 1)));printf("*(*(cTestTwo + 1) + 1)            = %d\n\n",*(*(cTestTwo + 1) + 1));printf("**pTwoArrayOneLine                = %d\n",**pTwoArrayOneLine);printf("*(*pTwoArrayOneLine + 1)          = %d\n",*(*pTwoArrayOneLine + 1));printf("*(*(pTwoArrayOneLine + 1))        = %d\n",*(*(pTwoArrayOneLine + 1)));printf("*(*(pTwoArrayOneLine + 1) + 1)    = %d\n\n",*(*(pTwoArrayOneLine + 1) + 1));printf("*pTwoElement                      = %d\n",*(pTwoElement + 0));printf("*(pTwoElement + 1)                = %d\n",*(pTwoElement + 1));printf("*(pTwoElement + 3)                = %d\n",*(pTwoElement + 3));printf("*(pTwoElement + 4)                = %d\n\n",*(pTwoElement + 4));

测试结果:

C语言 数组指针详解相关推荐

  1. php 数组 指针,php之数组指针详解

    本文主要和大家分享php之数组指针详解,首先我们会和大家分享php 数组指的针操作方法,希望能帮助到大家. 一.php 数组指针操作 利用php的内置函数:key,current,next(),pre ...

  2. 指针数组与数组指针详解

    指针数组与数组指针详解 1.什么是指针数组和数组指针? 指针数组:指针数组可以说成是"指针的数组",首先这个变量是一个数组,其次,"指针"修饰这个数组,意思是说 ...

  3. c语言的指针详解ppt,最全的C语言指针详解.ppt

    最全的C语言指针详解.ppt 第6章 指针,6.1 指针定义与使用 6.2 指针与函数 6.3 指针与数组 6.4 指针与字符串 6.5 指针数组与多级指针 6.6 指针与动态内存分配 6.7 指针的 ...

  4. C语言指针数组和数组指针详解

    C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...

  5. C语言之指针数组与数组指针详解

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.指针数组 一维指针数组的基本使用 一维指针数组的进阶使用 二.数组指针 - 数组为一维数组 - 数组为二维数组时 ...

  6. 关于指针数组与数组指针详解(知识点全面)

    1.目录 1.指针数组 2.数组指针 2.它们的区别 1.指针数组 如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组.其一般形式为: 数据类型    *数组名[常量表达式][常量表达式 ...

  7. c语言handler指针,详解C++ new-handler机制

    当 operator new 不能满足一个内存分配请求时,它抛出一个 exception(异常).很久以前,他返回一个 null pointer(空指针),而一些比较老的编译器还在这样做.你依然能达到 ...

  8. 一看就会的C语言数组(详解易懂)

    目录 1. 一维数组的创建和初始化. 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 二 ...

  9. 如何给6个整数的一维数组某个元素赋值_数组指针详解

    文章部分资料来源: Pointer to an Array | Array Pointer - GeeksforGeeks​www.geeksforgeeks.org 介绍数组指针之前,先来回顾指针: ...

  10. c++二维数组指针详解

    记住很重要的一点:数组名=&数组名[0],比如,对于二维数组a[3][4] ,a等同于&a[0],a[0]等同于&a[0][0] int main() { int a[3][4 ...

最新文章

  1. flink mysql日志,关于flink的日志文件设置
  2. 机房收费--上机状态查询
  3. linux文件系统启动流程,linux 内核启动过程以及挂载android 根文件系统的过程
  4. iOS之深入解析图片解压缩到渲染的过程与原理
  5. Linux下的USB总线驱动(04)——USB键盘驱动 usbkbd.c
  6. python发邮件有什么意思_python发邮件要装什么
  7. C# 两个类之间传递数据
  8. 七、内存、寄存器数据的传送
  9. vm和openstack_最佳新OpenStack技巧和窍门
  10. (MATLAB)使用梯度下降进行一元线性回归
  11. rest api是什么_如何选择合适的API测试工具
  12. python3 写九九乘法表(python 小白进阶之旅)
  13. VPC、快照、重置密码、重启、关机、扩容
  14. keras非线性回归代码专题
  15. vs2017 自定义生成规则 错误 MSB3721 命令 ”已退出,返回代码为 1。
  16. 2015百度之星初赛(1)1006 旋转卡壳
  17. Redis:redis通用命令;redis常见数据结构;redis客户端;redis的序列化
  18. Android实现扫一扫识别图像数字(镂空图像数字Tesseract训练)(上)
  19. 阿里云域名解析网络和服务架构设计总概览(一)
  20. 六年探索,见证程序化交易的惊人威力 --- 第一篇

热门文章

  1. 访问线上平台出现http状态码“502”和“504”
  2. 输入法里打出特殊符号
  3. 教你一招,如何使用抓包工具轻松获取微信文章数据!
  4. 河南大学软件学院宿舍楼综合布线设计方案
  5. 桌面整理工具 Stardock Fences(个人使用,建议试用)
  6. Shell到底是什么?
  7. 交互设计精髓之理解输出
  8. 表格闪退怎么解决_win10中excel2013闪退怎么修复_win10中excel2013闪退如何解决
  9. 在校开发的装柜辅助系统
  10. Linux内核编程11期:设备树(device tree)