首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【嵌入式开发】C语言 内存分配 地址 指针 数组 参数 实例解析

; -- 存放内容 : 存放程序运行中 动态分配 内存数据; -- 特点 : 大小不固定, 可能会动态 放大 或 缩小; 堆区内存申请 :  -- 申请过程 : OS中有一个记录空闲内存地址链表,..., 程序退出系统自动释放内存; -- 存放内容 : 全局变量, 静态变量; -- 特点 : 全局变量 和 静态变量存储一个区域, 初始化两种变量 和 未初始化 存储不同区域, 但是两个区域是相邻...函数参数调用和址调用 (1) 调用 和 址调用 调用 : 以方式参数传递给函数, 不能直接修改主函数中变量, 仅仅是副本传递给了函数; 址调用 : 变量指针 传递给函数...a,b变量也会发生改变; (2) 高级示例 需求分析 : 调用getint()函数, 输入数字字符 转为一个整形数据; getch 和 ungetch 函数 :  -- 使用场景 : 当进行输入时候...; a = p 和 a++ 会报错; 数组参数 :  -- 形参指针 : 数组作为参数传递给函数时候, 传递是数组首地址, 传递地址, 形参是指针; 数组参数示例 :  -- 函数参数是数组

3.9K20

C语言中函数参数传递三种方式

1,指针参 -> 变量地址直接传入函数,函数中可以对其进行修改。 2,引用参 -> 变量引用传入函数,效果和指针相同,同样函数中可以对其进行修改。...3,参 -> 参过程中,首先将c复制给函数c变量,然后函数中修改即是函数c变量,然后函数返回,系统自动释放变量c。而对main函数c没有影响。...3,输出3 2 解析: 第一个程序中,不成功原因是指在形参上改变了数值,没有实参上改变数值。...第二个程序中,地址成功原因利用指针改变了原来地址,所以实参就交换了。 第三个程序中,引用是直接改变两个实参变量a,b,所以就交换了。...另外一种用法是:当一个函数实际需要返回多个,而只能显式返回一个,可以另外需要返回变量以指针/引用传递给函数,这样函数内部修改并且返回后,调用者可以拿到被修改过后变量,也相当于一个隐式返回传递吧

1.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

【C语言基础】:深入理解指针(二)

= NULL) 上面代码程序运行到这一行语句,验证变量 p 是否等于 NULL 。如果确实不等于 NULL ,程序 继续运行,否则就会终止运行,并且给出报错信息提示。...经过调试后我们发现,main函数内部创建a和b确实传到了Swap函数里x和y中,但我们查看a和b地址与Swap函数里x和y地址进行对比,我们就可以发现问题了,它们地址不一样,这就相当于Swap...结论:实参传递给形参时候,形参会单独创建⼀份临时空间来接收实参,对形参修改不影响实参。...,顺利完成了任务,这⾥调用Swap2函数时候是变量地址 递给了函数,这种函数调用方式叫:址调用。...址调用,可以让函数和主调函数之间建立真正联系,函数内部可以修改主调函数中变量;所 以未来函数中只是需要主调函数中变量值来实现计算,就可以采⽤调用。

7710

Java数组定义和使用

1.前言 Java编程中,数组是一种非常重要数据结构,它允许我们存储多个一个单一变量中。本文深入探讨Java数组基本概念、创建和使用方法,以及如何处理常见数组问题。...=new double[3];//创建一个可以容纳3个字符串元素数组 3.2数组初始化 数组初始化主要分为动态初始化以及静态初始化 动态初始化:创建数组,直接指定数组中元素个数 int[...] array = new int[10]; 静态初始化:创建数组不直接指定数据元素个数,而直接具体数据内容进行指定 语法格式:T[] 数组名称={data1,data2,.....程序计数器:只是一个很小空间,保存下一条执行指令地址 虚拟机栈:与方法调用相关一些信息,每个方法执行时都会先创建一个栈帧,栈帧中包含有:局部变量表,操作数栈,动态链接,返回地址以及其他一些信息...对于大型数组,如果数组是基本数据类型,那么每次创建数组或将其作为参数传递给方法,都需要复制所有元素,这种方式比较低效,使用引用类型只需要复制引用,而不是整个数组内容。

10410

drag事件详解:html5鼠标拖动排序及resize实现方案分析及实践

进行放置针对对象事件名称说明被拖动元素dragstart元素开始被拖动时候触发drag元素被拖动反复触发dragend拖动操作完成触发目的地对象dragenter当被拖动元素进入目的地元素所占据屏幕空间触发...dragover事件处理程序中针对放置目标来设置dropEffect。effectAllowed指定拖放操作所允许效果。...ondragstart处理程序中设置effectAllowed属性方法说明void setData(format, data)拖动操作拖动数据设置为指定数据和类型。...从拖动目标(dragstart事件触发元素)生成半透明图像,并在拖动过程中跟随鼠标指针。这个图片是自动创建,你不需要自己去创建它。... dragenter 和dragover 事件处理程序中,该属性将设置为dragstart 事件期间分配任何,因此,可以使用effectAllowed来确定允许哪个效果。

6.1K21

JavaScript

动态类型语言特点: 运行期间才做数据类型检查语言,即动态类型语言编程,不用给任何变量指定数据类型。...连接数组 .sort() 排序 .forEach() 数组每个元素递给回调函数 .splice() 删除元素,并向数组添加新元素。....map() 返回一个数组元素调用函数处理新数组 var a = [2,3,5,[23,54,6,'sod'],6]; undefined a.push(666) 6 a (6) [2, 3,...) 参数: 参数 描述 currentValue 当前元素,必须有 index 当前元素索引,可选 arr 当前元素所属数组,可选 thisValue 对象作为该执行回调使用,传递给函数,用作...arr 当前元素所属数组,可选 thisValue 对象作为该执行回调使用,传递给函数,用作 "this"

1.5K51

前端拾零02—H5原生拖放总结 【原创】

目标元素 3.1 目标元素监听事件 ondragenter: 拖放元素进入目标元素触发事件,作用于目标元素 ondragover: 拖放元素目标元素上移动触发事件,作用于目标元素 ondrop:...拖放元素目标元素上放置触发事件,作用于目标元素 ondragleave: 拖放元素离开目标元素触发事件,作用于目标元素 3.2 demo <div id="div1" ondragenter="dragenter...Event.dataTransfer Event.dataTransfer: 拖放对象数据传递媒介,保存在dataTransfer对象中<em>的</em>数据只能在drop事件<em>处理</em><em>程序</em>中读取 Event.dataTransfer.dropEffect...: 指定拖放视觉效果,只有搭配effectAllowed属性才会生效,<em>在</em>dragenter中设置 (1) none: 不能拖放(除文本框外所有<em>元素</em><em>的</em>默认<em>值</em>) (2) move: 移动拖放<em>元素</em> (3...,必须在<em>dragstart</em>事件<em>处理</em><em>程序</em>中设置 (1) uninitialized: 不指定 (2) none: 不允许所有行为 (3) copy: 只允许<em>值</em>为”copy”<em>的</em>dropEffect

1.9K20

最全C语言基础知识梳理总结

实型常量类型:C编译系统实型常量作为双精度来处理。...数组名【常量表达式】;先定义后引用;一维数组初始化时可以只对一部分元素初始化,在对全部数组元素初始化时候可以部规定长度;但是若被定义数组长度与提供初始不一样,则数组长度不能省略。...字符串处理函数: 1、puts()一个字符串输出到终端 2、gets()从终端输入一个字符串到字符数组,并且得到一个函数值。 3、strcat()链接两个字符数组中字符串。...变量存储类别: (变量值存储时间)动态存储方式,程序运行期间进行分动态分配存储空间方式,静态存储方式是指在程序运行期间分配固定存储空间方式;存储空间分为程序区、静态存储区和动态存储区;全局变量全部放在静态存储区中...Static声明局部变量函数调用结束后不消失而保留原值,即占用存储单元不释放,在下一次调用该函数,该变量已有,就是上次函数调用结束

1.9K40

前端拾零02—H5拖放总结

目标元素 3.1 目标元素监听事件 ondragenter: 拖放元素进入目标元素触发事件,作用于目标元素 ondragover: 拖放元素目标元素上移动触发事件,作用于目标元素 ondrop:...拖放元素目标元素上放置触发事件,作用于目标元素 ondragleave: 拖放元素离开目标元素触发事件,作用于目标元素 3.2 demo <div id="div1" ondragenter="dragenter...Event.dataTransfer Event.dataTransfer: 拖放对象数据传递媒介,保存在dataTransfer对象中<em>的</em>数据只能在drop事件<em>处理</em><em>程序</em>中读取 Event.dataTransfer.dropEffect...: 指定拖放视觉效果,只有搭配effectAllowed属性才会生效,<em>在</em>dragenter中设置 (1) none: 不能拖放(除文本框外所有<em>元素</em><em>的</em>默认<em>值</em>) (2) move: 移动拖放<em>元素</em> (3) copy...事件<em>处理</em><em>程序</em>中设置 (1) uninitialized: 不指定 (2) none: 不允许所有行为 (3) copy: 只允许<em>值</em>为"copy"dropEffect (4) link: 只允许为"link

4.2K730

C语言函数栈帧详解

一个由系统自动分配内存空间,譬如调用函数、创建临时变量内存空间创建与销毁。 用于存储函数内部局部变量、方法调用、函数参数值等。 由高地址向低地址生长。...每调用一次函数便会创建一个独立栈帧。 栈帧中存放是函数中必要信息,如局部变量、函数参、返回等。 当函数运行完毕栈帧将会销毁。 ​ 下面进入主题,图解函数栈帧创建与销毁过程。...3.1.1 main函数栈帧创建动态演示 3.2 局部变量创建 PLAINTEXT int a = 10; 00AA142E mov dword ptr [ebp-8],0Ah...3.2.1 局部变量创建动态演示 3.3 函数参与调用 CPP ret = Add(a, b); 00AA1443 mov eax,dword ptr [ebp-14h] 00AA1446...eax,此时ebp存放Add函数栈底指针,(ebp + 8) 位置即函数创建ecx地址,其内部存放正是10。

1.9K20

【c++入门】引用,内联函数,auto

参和返回期间,函数不会直接传递实参或者变量本身直接返回,而是传递实参或者返回变量一份临时拷贝,因此用作为参数或者返回类型,效率是非常低下,尤其是当参数或者返回类型非常大,效率就更低...关键点在于没有产生任何拷贝,函数直接在原对象上工作 本例中,当TestFunc2被调用,并且以A&(结构体A引用)作为参数,它实际上是直接操作原有的对象a,而不是创建一个新拷贝。...对于 func 函数,它栈帧包含局部变量 a 存储空间 返回基本原理 当 func 函数通过 return a; 返回 a ,实际上返回是 a 一个副本,而不是 a 自身。...这个返回副本通常是通过寄存器传递给函数调用者, main 函数中, int ret = func(); 一句捕获了 func 返回 a 副本,并将其存储 main 局部变量 ret 中。...在这种情况下,通过悬空引用访问这块内存是非法,这可能导致程序崩溃 替代方案 返回静态局部变量引用:静态局部变量生命周期持续到程序结束,因此返回其引用是安全 int& func() {

7910

C语言基础知识梳理总结

实型常量类型:C编译系统实型常量作为双精度来处理。   ...字符串处理函数:   1、puts()一个字符串输出到终端   2、gets()从终端输入一个字符串到字符数组,并且得到一个函数值。   3、strcat()链接两个字符数组中字符串。   ...变量存储类别:   (变量值存储时间)动态存储方式,程序运行期间进行分动态分配存储空间方式,静态存储方式是指在程序运行期间分配固定存储空间方式;存储空间分为程序区、静态存储区和动态存储区;全局变量全部放在静态存储区中...static声明局部变量函数调用结束后不消失而保留原值,即占用存储单元不释放,在下一次调用该函数,该变量已有,就是上次函数调用结束。...static来声明一个变量作用有二个,一个是声明对局部变量。则为该变量分配空间整个程序执行期间始终存在;一个是在对全局变量声明中,该变量作用域仅限于本文件模块操作。

68810

C++ Primer ---函数(读书笔记)

函数调用时,完成部分工作: 使用实参进行初始化函数对应形参 控制权交给被调用函数 当函数遇到return 函数返回,函数返回完成两个部分工作: return 后面的返回(如果有的话)...形参和函数体内部定义变量 统称为局部变量。 形参是一种自动对象,只函数体内部生效。 如果局部变量定义本身有初始,就用该初始进行初始化,否则就是默认初始化,有可能产生未定义垃圾。...参数传递 值参数初始拷贝给变量,这是对变量改变,不会影响初始。如果传递是指针,拷贝指针给形参对象,两个指针对象不同,但都指向同一个地址。...引用参数引用参数,形参只是实参一个别名,不会产生拷贝操作,实际上是一个对象。形参不会创建对象。...也可以使用省略符形参,省略符形参只能适用于C/C++ 通用类型,大多数类类型对象递给省略符形参都无法正确拷贝。

60120

ABAP 模块化编程概念详解

参数分类 输入参数——是用来传递数据给模块化单元 导出参数——把模块化单元中数据返回给调用程序 变更参数——是把数据传递给模块化单元并返回更改后数据 (传入内表,内表变动,传出变动内表) 函数概念...Function导入参数 IMPORTING块中,可使用导出参数访问调用结果 异常 处理Function出现应用程序错误(例如,不适于计算), 函数模块就会提出相应异常。...参数传递方式 参数传递: 程序变量传递给子例程形式参数 传递类型: : 子例程中参数变量改变,不影响外部程序实际变量 引用: 若子例程中参数变量发生了改变...: 程序中定义变量 这些变量整个主程序和调用每个子例程中均可见(可进行处理局部变量子例程中定义变量称作局部变量, 这些变量只存在于相关子例程中(与形式参数相同),只能在子例程中使用...注意: 当全局变量和局部变量同名子例程中局部变量起作用,而全局变量不改变。

1.5K21

金九银十: 50 个JS 必须懂面试题为你助力

它允许你从内部函数访问外部函数作用域。 JS中,每次创建函数都会创建闭包。 要使用闭包,只需另一个函数内定义一个函数并暴露它。 问题16:列出一些内置方法及其返回。...undefined变量是程序中声明但未赋予任何变量,如果程序试图读取未定义变量,则返回undefined。...通过冒泡,事件首先由最内部元素捕获和处理,然后传播到外部元素。执行从该事件开始,并转到其父元素。然后执行传递给元素,以此类推,直到body元素。...可以通过文件,程序或函数开头添加“use strict”来启用严格模式 问题41:JS 中 prompt 框是什么 提示框是允许用户通过提供文本框输入输入框。...prompt() 方法显示一个对话框,提示访问者输入。 如果您希望用户输入页面之前输入,则通常会使用提示框。 弹出提示框,用户必须在输入输入后单击“确定”或“取消”才能继续。

6.5K31

《C++Primer》第六章 函数

在所有函数体之外定义对象存在于程序整个执行过程中,此类对象程序启动创建,直到程序结束才被销毁,局部变量生命周期依赖于定义方式。...我们用传递给函数实参初始化形参对应自动对象,对于局部变量对应自动对象来说,分为两种情况:如果变量定义本身含有初始化则用初始进行初始化;如果变量本身不含初始则进行默认初始化。...这意味着内置类型未初始化局部变量产生未定义。 局部静态对象 有时候需要令局部变量生命周期贯穿函数调用及之后时间,可以局部变量定义为static类型从而获得这样对象。...局部静态对象local static object程序执行路径第一次经过对象定义语句初始化,直到程序终止才被销毁。...值参数 实参被拷贝给形参,对变量改动不会影响到初始 指针形参:当执行指针拷贝操作,拷贝是指针,拷贝之后两个指针是不同指针,但是我们可以通过指针来修改它所指对象

70410

拖拽牛逼,轻松实现一个自由拖拽组件

属性如下所示: true:规定元素可拖动 false:规定元素不可拖动 auto:使用浏览器默认行为 当我们元素元素标签中添加 draggable 属性,该元素就可以进行拖动操作了。...,一类是拖动元素可以触发dragstart:鼠标点中元素并且开始移动触发 drag:拖拽过程中持续触发 dragend:拖拽结束松开鼠标触发 另一类是,是当拖拽元素到某个目标元素,目标元素会触发...,上文中我们讲到,拖动元素以及目标元素可以设置一系列事件,那么我们就可以组件列表渲染,为每个组件设置一下 dragstart 事件,该事件中我们需要做如下处理: 设置拖动元素放置行为为移动,...拖动元素目标元素松手添加元素到画布,即将组件元数据添加到list2中,元素所对应元数据记录也了这个组件画面中坐标位置。 然后dragend事件中取听以上动作。...同样,我们可以画布中组件添加mousedown事件,事件中我们添加mousemove事件监听,当画布中组件进行移动,我们实时将该被移动元素所对应元数据坐标进行更新。下面是代码实现。

1.7K30

50 个JS 必须懂面试题为你助力金九银十

它允许你从内部函数访问外部函数作用域。 JS中,每次创建函数都会创建闭包。 要使用闭包,只需另一个函数内定义一个函数并暴露它。 问题16:列出一些内置方法及其返回。...undefined变量是程序中声明但未赋予任何变量,如果程序试图读取未定义变量,则返回undefined。 问题 31: 列出一些JS框架 ?...通过冒泡,事件首先由最内部元素捕获和处理,然后传播到外部元素。执行从该事件开始,并转到其父元素。然后执行传递给元素,以此类推,直到body元素。...可以通过文件,程序或函数开头添加“use strict”来启用严格模式 问题41:JS 中 prompt 框是什么 提示框是允许用户通过提供文本框输入输入框。...prompt() 方法显示一个对话框,提示访问者输入。 如果您希望用户输入页面之前输入,则通常会使用提示框。 弹出提示框,用户必须在输入输入后单击“确定”或“取消”才能继续。

4.4K30

C++知识概要

派生类指针转换为基类指针,指针会不会变 一个派生类指针转换成某一个基类指针,编译器会将指针偏移到该基类在对象内存中起始位置 C 语言编译链接过程 源代码-->预处理-->编译-->...当进程调用 malloc 等函数分配内存,新分配内存就被动态添加到堆上(堆被扩张);当利用 free 等函数释放内存,被释放内存从堆中被剔除(堆被缩减) 栈(stack) 栈又称堆栈,是用户存放程序临时创建局部变量...综上: 栈区(stack) — 由编译器自动分配释放,存放函数参数值,局部变量等其操作方式类似于数据结构中栈 堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束可能由 OS...执行 int main(int argc, char *argv[])内存结构 参数含义是程序命令行下运行时候,需要输入 argc 个参数,每个参数是以 char 类型输入,依次存在数组里面...为什么拷贝构造函数必须引用不能 拷贝构造函数作用就是用来复制对象使用这个对象实例来初始化这个对象一个新实例。

1.1K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券