`

关于变量标识和数组标识的地址问题

    博客分类:
  • c
 
阅读更多

变量是指一块内存,这句话怎么理解?

 

 

void main()
{
  int a= 2;
  int *p = &a;
}

//编译得到
main:
 pushl %ebp
 movl  %esp,%ebp
 subl    $16,%esp
 movl   $2, -8(%ebp)    // int a = 2;
 leal      -8(%ebp), %eax  // int *p = &a;
 movl   %eax,-4(%ebp)
 leave 
 ret

 at&t汇编,源数据在前目标在后。

 

①在编译后这个‘a’已经不存在,它就是一块内存的地址,所有对‘a’的操作,编译器自动转化为对该地址内数据的操作。如上int a = 2 就是把 2 赋值给 ebp寄存器所存地址-8 这块内存上

②leal就是把ebp寄存器所存地址-8 这个值 赋值给eax寄存器,而不是该寄存器保存的内存地址上保存的值

③指针变量p和a一样,编译后都是一块地址,‘int’、‘*’都是给这个地址做限定

 

 

例2

 

void main()
{
  int temp[] = {1,2};
  int *p = temp;
  int (*m)[] = &temp;
}

编译后获得:
main:
  pushl  %ebp
  movl   %esp,%ebp
  subl     $16,%esp
  movl    $1,-16(%ebp)
  movl    $2,-12(%ebp)  //int temp[] = {1,2};
  leal    -16(%ebp) ,%eax
  movl     %eax,-8(%ebp) // int *p = temp;
  leal    -16(%ebp),%eax
  movl    %eax,-4(%ebp)  // int (*m)[] = &temp;
  leave
  ret

 ①所有对数组变量的操作都是对,数组第一个元素所在地址的操作

 ②对&temp的操作也是对该地址的操作;

 

分享到:
评论

相关推荐

    流程控制和数组.pptx

    总的来说,流程控制和数组是Java编程中不可或缺的概念,它们共同构建了程序的逻辑框架。通过理解和熟练运用这些概念,开发者可以编写出能够根据条件变化动态响应的、具有复杂逻辑的游戏和其他应用程序。

    汇编语言程序设计高级过程与字符串和数组PPT学习教案.pptx

    【汇编语言程序设计高级过程与字符串和数组】 在汇编语言编程中,高级过程的定义和调用是核心概念之一。第六章中探讨了移位、乘法、除法指令,以及局部变量的处理和过程调用的细节。下面我们将深入理解这些知识点。...

    第2章 变量和基本类型1

    复合类型如指针(int*)、引用(int&)和数组在C++中扮演着重要角色。指针存储的是其他对象的地址,引用则是一个已存在的对象的别名,两者都可以作为函数参数或返回值。数组是一系列相同类型元素的集合,它们的内存...

    变量与数据类型PPT教案学习.pptx

    - **引用数据类型**:包括类(class), 接口(interface)和数组。类和接口是面向对象编程的核心,数组则用于存储同类型数据的集合。 6. **变量**:变量是程序中用于存储数据的容器,其值可以在程序执行过程中改变。...

    matlab标志是识别系统(教程,系统框架GUI).rar

    1. **MATLAB基础**:MATLAB的核心是矩阵和数组运算,它的语法简洁,适合进行数值计算。学习MATLAB,首先要掌握基本的数据类型、变量定义、算术运算符以及流程控制语句。 2. **图像处理工具箱**:MATLAB提供了强大的...

    西门子S7-300高级编程培训教材,内部教材__5、STEP_7中的数据类型和变量.ppt

    2. 变量:声明、类型、范围和数组。 3. 用户自定义数据类型(UDT):用于构建符合项目需求的自定义结构。 4. 结构化编程:通过数据类型的合理使用和变量的声明,实现代码的模块化和可重用性。 5. 数据传输:通过变量...

    20151910042-刘鹏-08-指针程序设计(二)1

    在实验的第二个问题中,编写了一个名为sort的函数,该函数接受一个整数数组和数组长度作为参数。在这里,传入数组的实际上是数组首元素的地址,因为数组名在函数调用中可以作为指针使用。函数内部通过指针p1和p2遍历...

    数据结构实验报告一—约瑟夫环问题.pdf

    《约瑟夫环问题》是数据结构领域中的一个重要问题,其基本思想源于一个古老的传说,涉及到了线性表的操作和数组的应用。在这个实验报告中,我们深入探讨了如何使用编程来解决这一问题。 首先,需求分析指出,程序需...

    C语言数据类型指针PPT课件.pptx

    在C语言中,数据类型是编程的基础,它们定义了...总之,这个PPT课件深入浅出地讲解了C语言中的数据类型,包括整型、浮点型、字符型和数组,以及指针和指针变量的概念和使用方法,是学习C语言基础知识的重要参考资料。

    C-C语言趣味程序设计编程百例精解(7)[归类].pdf

    接下来的嵌套循环用于组合三个不重复的三位数平方,通过标志变量`flag`来检查是否存在重复数字,如果不存在则打印出结果。 这个例子展示了C和C++编程中常见的算法设计思路,如穷举法、条件判断和数组操作。同时,它...

    ipls.zip_iPLS_偏最小二乘_间隔偏最小二乘

    这两种方法在化学、生物、医学和工程等领域广泛应用,主要用于处理多元线性回归问题,特别是当自变量之间存在高度共线性时。 偏最小二乘法(PLS)是一种降维的回归分析方法,它通过将原始自变量转换为少数几个新...

    51单片机实现LED流水灯(数组方式和位运算方式)

    对于后者,sbit是定义一个标志位,也叫位变量。而类似于#define key1 P3^0就说不通了。 2.对于一般的二极管LED来说,驱动其发光的电流一般为5-30mA。所以一般的发光二极管都接成灌电流的形式,(即电流是流入单片机的...

    20170628_c语言一二三四五研讨会_李智宇1

    C语言中的指针分为一级、二级等,指针数组和数组指针是两种不同的概念。例如,`int shu[3][4]`是二维数组,访问`shu[1][2]`涉及到多级指针操作。指针数组是一组指向相同类型指针的数组,而数组指针是指向数组的指针...

    C语言简答题汇总

    2、相同的结构的结构体变量可以相互赋值,而数组不行,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以作为左值进行运算,所以数组之间就不能通过数组名称...

    《函数概念》说课.ppt

    在中学数学的教学中,《函数概念》是一个至关重要的单元,它标志着学生从常量数学向变量数学的转变,是理解和掌握运动变化规律的关键。这个单元主要涉及人民教育出版社八年级下册第十九章的内容,即一次函数,具体...

    新概念C语言.李一波(带详细书签).pdf

    18.3.7 关于变量的声明和定义 198 18.3.8 存储类别小结 199 18.4 编译预处理 201 18.4.1 宏替换 201 18.4.2 文件包括 204 18.4.3 条件编译(选讲内容) 204 18.5 如何运行一个多文件的程序 207 习题 208 第...

    2022公司嵌入式工程师面试题

    ### 2022年嵌入式工程师面试知识点解析 #### C语言基础 ... - 使用结构体和数组实现员工信息的输入与排序输出。 5. **Linux Makefile编写**: - 编写Makefile以编译多个C源文件,并清理生成的目标文件。

Global site tag (gtag.js) - Google Analytics