当前位置: 首页 > news >正文

指针知识梳理10-指向数组的指针

一、指向数组的指针

1、所谓指向的意思:我们通常说指针变量指向某个变量或者某块内存,意思是这个指针变量存储了某个变量的地址或者某块内存的地址。

2、一个变量能够占多个字节,我们通常所说某个 的地址指的是这块内存的起始地址。比方int  a,变量a栈 0x10 0x11 0x12 0x13这四个字节,那么a的地址是0x10.

3、(1)曾经我们定义一个数组的时候,一般是把这个数组当做同种类型的变量的集合来看的,即数组的每一个元素。使用方法为a[i].

       (2)我们也能够把数组当做一个总体来看。int  a[5],  a是个变量。这个变量的类型是数组,这个变量占40个字节,。

                  依照变量定义基本模型 type  name ,假设数组是这么定义可能更好理解这个总体概念, int[10]   a,可是C语言语法不是这样写的。

         (3) 得到一个变量的地址 用&符号。那么当把数组a看做一个变量的时候。它的地址为 &a.

               假设要存储 &a这个数据,须要对应的指针变量,即所谓指向数组的指针。

               定义方法例如以下  int (*p)[5]。事实上依照  type *p 这个模型来定义,int[5]  *p 这样的写法更好理解,仅仅只是C语言的爸爸在创造语法的时候不这么规定。

              那么 p = &a;

              对于 p 来说。p+i 地址偏移 i*sizeof(a)  

          (4) 下面须要分清楚区分

                对于 int a[5];

                  &a 与 &a[0] 的差别。这两个得出来的地址 在数值上是相等的,可是他们的数据类型是不一样的。

                  int  *p1 = &a[0];

                  int  (*p2)[10] ;

                  p2 = &a;

                 

                   如上图。我们分别把数组当做集合和总体来看。

                   p1 存储a[0]的地址 。也就是a[0]的起始地址。0x10.

                   p2 存储a的地址,也就是数组的事实上地址。也是a[0]的起始地址 0x10.

                   p1+1  结果为 0x14

                   p2+1  结果为 0x24

4、typedef 使用方法

      typedef  int(type*)[5];

      type 是种类型,是指向一维数组的指针类型(说法比較拗口),下面写法定义变量p1是等效的。

      type  *p1;

      int (*p1)[5];

5、在语法层面上使用

        typedef  int(type*)[5];

        int  a[5];

        type p;

        p = &a; //这里数组名就不代表的是a[0]的地址了。

        那么 *p 就是 a 了。

        a[i] ---> (*p)[i];// 注意这里优先级


二、二维数组的数组名

       int  a[2][3];

       二维数组能够看成一维数组。a[0]   a[1]是数组的两个元素,每一个元素是 个一维数组 (int[3]).

       一维数组的数组名能够代表第一个元素的地址,第一个元素是个int[3]型的数组。

     

typedef  int(*p)[3];
int a[2][3];
p = a;
p = &a[0];
for(i = 0;i<2;i++)
{
	for(j = 0;j<3;j++)
	{
	//下面几种方式等效
		a[i][j]  = 1;
		*(*(p+i)+j)  = 1;
		*(p[i]+j) = 1;
		p[i][j] = 1;
	}
}








               





转载于:https://www.cnblogs.com/wzzkaifa/p/6950181.html

相关文章:

  • Python入门基础:代码的编码风格
  • 中科院分词系统(NLPIR)JAVA简易教程
  • 62.Unique Paths
  • HttpClient调用api
  • 如何选择版本控制系统之三---代码托管操作
  • UVA 11324 The Largest Clique(强连通分量+缩点DAG的DP)
  • 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列
  • Java - byte[] 和 String互相转换
  • 1.5在linux下新增大于2T的硬盘在linux下挂载操作
  • Mybatis在oracle批量更新
  • visual studio for mac在线安装网络错误
  • Angular--ui-router的使用
  • Linux 软件安装
  • 文本样式
  • 第11章 服务管理
  • CSS相对定位
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JS字符串转数字方法总结
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Linux后台研发超实用命令总结
  • PHP CLI应用的调试原理
  • PHP的Ev教程三(Periodic watcher)
  • spring + angular 实现导出excel
  • SQLServer之创建显式事务
  • Webpack 4x 之路 ( 四 )
  • 码农张的Bug人生 - 见面之礼
  • 判断客户端类型,Android,iOS,PC
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 异常机制详解
  • 怎么把视频里的音乐提取出来
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​如何在iOS手机上查看应用日志
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​学习一下,什么是预包装食品?​
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #{} 和 ${}区别
  • #LLM入门|Prompt#3.3_存储_Memory
  • #微信小程序(布局、渲染层基础知识)
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (¥1011)-(一千零一拾一元整)输出
  • (1)(1.11) SiK Radio v2(一)
  • (1)bark-ml
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (16)Reactor的测试——响应式Spring的道法术器
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (3)选择元素——(17)练习(Exercises)
  • (八十八)VFL语言初步 - 实现布局
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)linux 命令大全
  • (转)大道至简,职场上做人做事做管理
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)