本文讨论在C/C++中,一维数组和二维数组中的地址偏移问题。

一维数组 int a[3];

二维数组 int a[3][3];

1、先看一维数组的情况:

#include

usingnamespacestd;

intmain()

{

inta[3] = {1,2,3};

cout <

cout <

cout <

cout <

cout <

cout <

cout <

cout <

system("pause");

return0;

}

从结果中可以看出,&a、a、&a[0]表示的是同一地址,但是级别是不一样的。

&a+1地址与&a相比,偏移了12个字节,即声明数组的空间大小;

a+1地址与a相比,偏移了4个字节,即数组中一个元素的空间大小;

&a[0]+1地址与&a[0]相比,偏移了4个字节,即数组中一个元素的空间大小;

也就说&a、a、&a[0]虽然都表示同一地址,但是编译器会区分它们,&a指向整个数组的地址,是数组中最高级别的地址,而a和&a[0]表示&a代表地址的下一级别的地址。

2、二维数组的情况

#include

usingnamespacestd;

intmain()

{

inta[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

cout <

cout <

cout <

cout <

cout <

cout <

cout <

cout <

cout <

cout <

cout <

cout <

system("pause");

return0;

}

结果分析:

&a、a、&a[0]、a[0]、&a[0][0]表示的是同一地址,但是级别差距很大。

声明的 int a[3][3] 大小为36字节。

&a+1地址与&a相比,偏移了36个字节,即声明数组的空间大小;

a+1地址与a相比,偏移了12个字节,即数组中一行元素的空间大小;

&a[0]+1地址与&a[0]相比,偏移了12个字节,即数组中一行元素的空间大小;

a[0]+1地址与a[0]相比,偏移了4个字节,即数组中一个元素的空间大小;

&a[0][0]+1地址与&a[0][0]相比,偏移了4个字节,即数组中一个元素的空间大小;

由以上可以看出,&a是最高级别的地址,a+1与&a[0]+1是第二级别的地址,a[0]+1与&a[0][0]+1代表着二维数组中第三级别的地址。

c语言数组字节偏移,C语言数组中的地址偏移问题相关推荐

  1. 如何c语言看字节大小,C语言字节大小day5

    计算字节大小 int, float, double 和 char 字节大小 F11运行 注解: 长度就是有几个字符,字节就是这个字符数组共有几个元素. 2.一个字节的长度为8bit,数据的长度由数据的 ...

  2. c语言四字节对齐,C语言字节对齐详解

    先了解4个基本概念: 1.数据类型自身对齐值:即数据类型的大小(数组取数组成员类型的自身对齐值),如char的自身对齐值是1,short是2,int.float.double都是4,单位字节 2.结构 ...

  3. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  4. STM32 地址偏移问题及怎么运用

    STM32 地址偏移问题 就举一个例子哦 其他类推 我就举STM32  里面一个结构体吧! //以下函数或者定义不是在一起的,我只是把他们拉出来,也说明是相关联的!#define __I volati ...

  5. c语言数组字节偏移,C语言数组注意问题

    inta[10]; 数组名是常量不能为左值(如:a=5:) 不要认为数组元素a[i]代表数组元素的值,它代表数组元素本身,可作为左值使用. 为指针进行初始化的字符串是只读的 (如:char*p=&qu ...

  6. C语言编程基础-10函数形参数组做形参文件操作

    函数形参 被调函数的形参在被调用时临时创建并使用实参对其赋值,故直接修改形参(特殊形式的形参如指针,数组除外)本身只会影响到被调函数内部; 形式参数是在函数调用发生时临时创建出来的,在函数调用结束时又 ...

  7. 【C语言】小妹不懂指针和数组的关系?那就安排指针数组关系详解

    目录 前言 一.什么是数组 二.什么是指针 三.指针变量的大小 四.数组和指针的关系 五.指针变量的自增自减运算 六.两个参数确定一个数组 七.字符型指针和字符型数组 总结 写在最后 前言 前段时间整 ...

  8. c#数组赋初值_c语言给数组赋值的3种形式

    c语言给数组赋值的3种形式 在C语言中,对数组进行赋值的三种形式 1.通过循环的形式 即:数组名[下标] 对数组的元素进行依次赋值#include int main() { int i; int a[ ...

  9. 怎么UI数组惊醒初始化 c语言,C语言教案7-数组.ppt

    C语言教案7-数组 C 语 言 程 序 设 计 第 7 章 数组 数组 一维数组的定义 一维数组元素的引用 一维数组的初始化 例7.3:求一组数据的最大值最小值 例7.4:求一组员工的平均工资 例7. ...

  10. c语言用一维数组求字符串,c语言一维数组练习题.doc

    c语言一维数组练习题 精品文档2016全新精品资料-全新公文范文-全程指导写作 –独家原创 PAGE1 / NUMPAGES1 c语言一维数组练习题 4.1内容概述 本章主要介绍了数值数组和字符数组的 ...

最新文章

  1. Spark 学习文章
  2. 一个算法同时解决两大CV任务,让目标检测和实例分割互相帮助,地平线实习生论文被AAAI 2020收录...
  3. 慕课网初识python_初识Python笔记
  4. 有了内阻值,怎么判断电池是否健康?
  5. python路径拼接os.path.join()函数和os.makedirs的用法
  6. Katas编写的Java教程:Mars Rover
  7. 白话Word2Vec
  8. 回弹强度记录表填写_混凝土回弹强度记录表格
  9. 土豆服务器延期修复,Uplay更新失败解决方法 教你对付土豆服务器!
  10. 07过去进行时,过去将来时,陈述句 变宾语从句(that 引导)
  11. 【历史上的今天】1 月 6 日:“互联网之子”的陨落;微软云服务先驱出生;世界上第一台 5G 笔记本
  12. 【C++/OOP】(侯捷著) (转)
  13. Echarts显示行政区域图并上色
  14. java 第三方库common系统详解
  15. 使用监听器Listener实现在线人数统计功能
  16. 数据中心太耗电,送你一个节能神器
  17. 数据挖掘之聚类分析(Cluster Analysis)
  18. Spring Boot从0开始学的个人笔记11 --安全security
  19. 【LeetCode】第290场单周赛 --- 记录一次AK周赛
  20. 【论文笔记】FCN:Fully Convolutional Networks for Semantic Segmentation

热门文章

  1. Linux驱动实现GPIO模拟I2C读写操作
  2. MTK平台camera驱动架构分析
  3. 解读I2C协议和读写流程
  4. 实时查看Linux IO复用情况
  5. 登录注册页面(连接MySQL8.0.15版本)
  6. OwnCloud 搭建
  7. DR模式 + keepalived
  8. 计算机网络之网络层服务和网络层服务模型
  9. MPLS virtual private network 地址重叠实验(华为设备)
  10. STP重新收敛过程和补充内容