C语言数组寻址
C语言数组
数组的定义
数组是用来存放数据类型相同且逻辑意义相同的数据数组的大小
数组的大小不能是变量,必须是常量或者常量表达式,常量表达式由编译器编译时自动求值。
也可以不指定数组大小,但必须对数组进行初始化,编译器在编译时会根据初始化列表中元
素的个数计算数组大小,例如:int nAry[]={1,3,4};
数组的初始化
在定义数组时可以使用初始化列表进行初始化,例如:int nAry[3]={0,3,3};
但是只能在定义时使用这种方式赋值,在其他地方只能进行单个元素赋值.
如果数组的数据类型是基本数据类型,如果在初始化列表中只对前面几个
元素进行初始化,后面没有进行赋值初始化,那么剩下的元素将被初始化
为0,例:

关于数组名
- 数组名是数组的首地址,它是一个常量,所以不可以对数组名使用自增或者自减运算符
- 对数组名使用sizeof运算符,可以获取到数组所占用的字节数,但是如果数组名做为参
数传递给函数,在函数内部对这个数组参数使用sizeof,求得的只是这个指针参数的大
小,并不是数组大小. 例:

数组寻址:
一维数组寻址
设有一维数组Type Arry[N],其中Type表示数组中元素的类型,Arry表示数组名,
N表示元素个数,那么数组中第n个元素的内存地址为:(int)Arry+n*sizeof(Type)
例:

二维数组寻址
设有二维数组Type Arry[M][N],那么数组中第Arry[m][n]个元素的内存地址为:
(int)Arry+sizeof(Arry[0])m+sizeof(Type)n
例:int nAry[10][3]; for (int iIndex = 0; iIndex < 10; iIndex++)
{
for (int jIndex = 0; jIndex < 3; jIndex++)
{
printf("nAry[%d][%d]地址:%08X\t", iIndex, jIndex,&nAry[iIndex][jIndex]);
printf("手工计算nAry[%d[%d]地址:%08X\r\n", iIndex, jIndex, (int)nAry + sizeof(nAry[0])*iIndex+sizeof(int)*jIndex);
}
}
运行结果:

三维数组寻址
设数组Type Arry[M][N][P],那么数组中第Arry[m][n][p]个元素的内存地址为:
(int)Arry + sizeof(Arry[0])M + sizeof(Type)(n*P+p);
例:int nAry1[3][4][5]; for (int iIndex = 0; iIndex < 3; iIndex++)
{
for (int jIndex = 0; jIndex < 4; jIndex++)
{
for (int mIndex = 0; mIndex < 5; mIndex++)
{
printf("nAry[%d][%d][%d]地址:%08X\t", iIndex,
jIndex, mIndex,
&nAry1[iIndex][jIndex][mIndex]);
printf("手工计算nAry[%d][%d][%d]地址:%08X\r\n",
iIndex, jIndex, mIndex,
(int)nAry1 + sizeof(nAry1[0])*iIndex + sizeof(int)*(jIndex * 5 + mIndex));
}
}
}运行结果:

任意多维数组寻址
设多维数组Type Arry[M][N][O].....[Y][Z],那么该数组中任意一个数组元素
Arry[m][n]....[y][z]的内存地址为:
(int)Arry + sizeof(Arry[0])*m + sizeof(Type)*(n*O+..+y*Z+z)
C语言数组寻址的更多相关文章
- Go语言数组和切片的原理
目录 数组 创建 访问和赋值 切片 结构 初始化 访问 追加 拷贝 总结 数组和切片是 Go 语言中常见的数据结构,很多刚刚使用 Go 的开发者往往会混淆这两个概念,数组作为最常见的集合在编程语言中是 ...
- C语言-数组篇
C语言数组 一.数组的概念 用来存储一组数据的构造数据类型 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. 二.数组的定义 格式: 类型 数组名[元素个数] ...
- GO语言数组和切片实例详解
本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式: ...
- C语言 数组 列优先 实现
C语言数组结构列优先顺序存储的实现 (GCC编译). 从行优先转换为列优先存储方式, 与行优先相比, 不同之处在于改变了数组维界基址的先后顺序, 从而改变了映像函数常量基址. /** * @brief ...
- C语言 数组 行优先 实现
C语言数组结构行优先顺序存储的实现 (GCC编译). /** * @brief C语言 数组 行优先 实现 * @author wid * @date 2013-11-02 * * @note 若代码 ...
- 不可或缺 Windows Native (5) - C 语言: 数组
[源码下载] 不可或缺 Windows Native (5) - C 语言: 数组 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 数组 示例cArray.h #ifn ...
- C语言数组
在C语言中,对于三维或三维以上数组的使用并没有很好的支持,而且使用率也非常的低,后面会对三维数组做一些简单的分析,这篇文章主要以二维数组来探讨一些C语言中数组使用的相关概念和技巧. 1 一个var[i ...
- C语言数组:C语言数组定义、二维数组、动态数组、字符串数组
1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...
- Go语言数组的使用
Go 语言数组 Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 相对于去声明number0 ...
随机推荐
- Linux Bash Script conditions
Linux Bash Script conditions shell 编程之条件判断 条件判断式语句.单分支 if 语句.双分支 if 语句.多分支 if 语句.case 语句 refs http:/ ...
- TS & ES-Next & playground
TS & ES-Next & playground TS TypeScript: TS Playground - An online editor for exploring Type ...
- JavaScript Weekly
JavaScript Weekly 技术订阅 https://javascriptweekly.com/issues/489 WebGL https://xem.github.io/articles/ ...
- linux bash shell & lsof & grep & ps
linux bash shell & lsof & grep & ps lsof list all open files # lsof & grep $ lsof -P ...
- Dart: 请求graphql数据
import 'package:http/http.dart' as http; const url = "http://127.0.0.1:4000/graphql"; main ...
- 【重榜?】.NET 6 Preview 1 开箱上手!带你尝试新版本更新!
目录 跨平台 UI 应用 Blazor 桌面应用 System.CommandLine 其它更新 ASP.NET Core 最近 .NET 6 Preview 1 发布了,.NET 统一是此版本的核心 ...
- Github Packages和Github Actions实践之CI/CD
概述 Github在被微软收购后,不忘初心,且更大力度的造福开发者们,推出了免费私有仓库等大更新.近期又开放了packages和actions两个大招,经笔者试用后感觉这两个功能配合起来简直无敌. G ...
- Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化
知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...
- Elasticsearch 分片集群原理、搭建、与SpringBoot整合
单机es可以用,没毛病,但是有一点我们需要去注意,就是高可用是需要关注的,一般我们可以把es搭建成集群,2台以上就能成为es集群了.集群不仅可以实现高可用,也能实现海量数据存储的横向扩展. 新的阅读体 ...
- 6. vue组件详解(一)
主要内容: 1. 组件的基本使用 2. 全局组件和局部组件 3. 父组件和子组件 4. 组件语法糖的写法 5. 组件data关联的写法 6. 父子组件的通信 组件系统是 Vue 的一个重要概念,因为它 ...