C语言程序执行细节:变量存储、函数调用与返回

需积分: 0 0 下载量 164 浏览量 更新于2024-08-04 收藏 83KB DOCX 举报
本文将深入探讨在程序执行过程中变量、函数调用及返回值的存储机制,特别是关于函数返回值、局部变量、参数、函数调用方式以及不同类型的变量分配和运算方式。 首先,我们来看函数返回值的存放位置。对于不同类型的返回值,其存放的寄存器有所不同。例如,`char`型返回值存放在`AL`寄存器,`int`型返回值存放在`AX`寄存器,而`Longint`型返回值则会使用`AX`和`DX`寄存器。这一规则确保了不同类型的数据能够正确地从函数返回给调用者。 局部变量的分配和释放与函数的生命周期紧密相关。当函数开始执行时,局部变量的空间会被分配,直到函数执行完毕,这些空间才会被释放。如果局部变量未在函数中使用,那么它们将不会被分配内存空间,以节省资源。 参数的存储空间分配通常在函数被调用时进行,调用者将参数的值压入堆栈,而函数返回后,这些空间会被释放。这种机制使得参数可以在函数调用之间传递信息。 函数调用方式在不同的函数间可能存在差异。以题目中提到的`f1`, `f2`和`f3`为例,`f3`使用`call`指令并指定段地址和偏移地址,这意味着它支持跨段调用,可以访问距离超过一个段的地址。相比之下,`f1`和`f2`的调用默认为本段内的调用。在返回时,`f3`的调用需要使用`retf`指令来配合,因为它在调用时进行了`pushcs`和`puship`操作,因此返回时需执行相应的`popip`和`popcs`以恢复调用前的状态。 静态变量的存储空间分配类似于全局变量,均在全局变量区域。它们的生命周期始于程序启动,终于程序结束,但作用域受到变量所在的代码块限制。如果静态变量在函数内部定义,那么它只在该函数内部可用。 程序中的所有变量,无论是全局还是局部,其存储空间通常是连续的。未使用的全局变量和局部变量不会分配内存空间。变量的大小取决于其类型:`int`占2个字节,`char`占1个字节,`long`占4个字节。这些大小差异影响了运算方式,例如,对于`int`和`char`类型,基本的算术运算如加减乘除可以直接使用8086指令集中的相应指令;而对于`long`类型,可能需要组合多个指令来完成一次运算,如加法可能需要先`add`再`adc`。 结构体变量的存储分配是根据结构体中各个数据项的类型和顺序来决定的。结构体变量在内存中是连续分配的,每个数据项占据相应类型的大小。外部声明的结构体变量会分配在全局变量区,而内部声明的结构体会在函数的局部变量空间中分配。 总结来说,程序执行涉及到变量的存储、函数调用和返回的细节,这些都需要理解寄存器的使用、内存分配策略以及不同数据类型在计算中的处理方式。理解这些概念有助于编写更高效、更优化的代码。

执行ALTER TABLE v_dvp DROP FOREIGN KEY FK_constraint_name, DROP INDEX index_name, CHANGE 下线日期 offline DATE, CHANGE 试验开始日期 project_start DATE, CHANGE 试验结束日期 project_end DATE ont null, CHANGE 试验周期 project_cycle INT, CHANGE 颜色 color VARCHAR(255) ont null, CHANGE 车辆配置 V_configuration VARCHAR(255) ont null, CHANGE 阶段 stage VARCHAR(255) ont null, CHANGE 用途 use_to VARCHAR(255) ont null, CHANGE 车辆OWNER V_owner VARCHAR(255), CHANGE 重复性 repeatability VARCHAR(255), CHANGE 需求部门 Demand_department VARCHAR(255) ont null, CHANGE 人员 personnel VARCHAR(255) ont null, CHANGE 共用性 commonality VARCHAR(255), CHANGE 使用地点 place_use VARCHAR(255) , CHANGE 完成状态 completion_status VARCHAR(255), CHANGE 父记录 parent_record VARCHAR(255);报错ALTER TABLE v_dvp DROP FOREIGN KEY FK_constraint_name, DROP INDEX index_name, CHANGE 下线日期 offline DATE, CHANGE 试验开始日期 project_start DATE, CHANGE 试验结束日期 project_end DATE ont null, CHANGE 试验周期 project_cycle INT, CHANGE 颜色 color VARCHAR(255) ont null, CHANGE 车辆配置 V_configuration VARCHAR(255) ont null, CHANGE 阶段 stage VARCHAR(255) ont null, CHANGE 用途 use_to VARCHAR(255) ont null, CHANGE 车辆OWNER V_owner VARCHAR(255), CHANGE 重复性 repeatability VARCHAR(255), CHANGE 需求部门 Demand_department VARCHAR(255) ont null, CHANGE 人员 personnel VARCHAR(255) ont null, CHANGE 共用性 commonality VARCHAR(255), CHANGE 使用地点 place_use VARCHAR(255) , CHANGE 完成状态 completion_status VARCHAR(255), CHANGE 父记录 parent_record VARCHAR(255) > 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ont null, CHANGE 试验周期 project_cycle INT, CHANGE 颜色 color VARCHAR(2' at line 6 > 时间: 0s怎么解决

2023-07-14 上传