首页
学习
活动
专区
圈层
工具
发布

全国二级C知识点总结5-函数

实参在主调函数中内有效,进入被调函数后,实参变量也不能使用。(注:在进行函数调用时,函数必须有确定的值) l 实参向形参单向传递数值,不能将形参的值反向的传送给实参。...C)同名的实参和形参占同一存储单元 D)函数的形参和实参分别占用不同的存储单元 【解析】本题考点是函数的参数定义,在函数中,主调数中里边的参数叫做实参,而被调函数里边的参数叫做形参,当函数传递时,...,且变量的初始化只进行一次。...而对于自动变量(auto或者缺省不写),如果不赋初值则它的值是一个不正确的值。 10、内部函数与外部函数 l 用static 进行说明的函数称为静态函数,也叫内部函数。...,实参字符数组名a传递给形参字符指针s,使s指向字符串“good”;在函数fun中对字符串进行遍历,如果指针s指向字符ASCII码值是偶数则输出该字符。

2.6K20

有栈协程和无栈协程

函数调用过程 当可执行文件并载入到内存中,进程地址空间被划分为代码段、数据段、堆、栈等,如下图所示: image-20211009104602015.png 而程序运行过程中需要的内存是在栈和堆空间分配的...,当进程内发生函数调用时,需要保存一些上下文信息以及为函数内局部变量分配存储空间,这些存储空间是在栈上分配的,具体来说:在函数调用之前主调函数会将函数参数和返回地址入栈,被调函数在执行之前会先将主调函数的...ebp入栈,并在栈上新开辟一块内存用于存放局部变量等信息;如下图所示: image-20211009113535676.png 当被调函数执行完毕之后,会执行退栈操作,找到函数退出之前的下一条指令的地址并将栈中存放的局部变量信息恢复...,函数通过函数返回语句实现执行权限的归还&通过栈中返回地址实现被中断执行流程的恢复,而有栈协程正是基于这一朴素的想法实现的:在有栈协程中,将每个并行事务看成是一个函数调用,而协程库负责把让出执行权时的协程的上下文缓存起来...,一个是局部变量的值的恢复,一个是从被中断的位置处继续执行,针对前者,我们可以将函数内局部变量全部迁出来用全局结构缓存,在调度到协程时通过参数形式传递进去,对于后者我们可以通过标签记录下函数中断位置的标签

6.7K43
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python函数与码复用

    在一般编程中,函数有两个作用,它通过函数定义一段功能,可以降低编码难度,同时也可以对一段代码进行复用。...这叫可选参数传递。此外在参数传递中,还有一种叫可变参数传递,也就是说在定义函数时,可以设计函数接收的参数时可变数量的,即不确定参数总数量。...说到可变参数传递就不能不说max()函数和min()函数,他们就是使用可变参数来进行参数的定义。参数的传递指的是在函数调用时,参数可以按照位置或名称方式传递。...5.局部变量和全局变量局部变量是函数内部使用的变量,而函数外部整个程序使用的变量叫全局变量。...所以在模块化设计过程中,对于模块内部,也就是函数内部,近可能的紧耦合,它们之间通过局部变量可以进行大量的数据传输。

    57310

    【Redis源码】Redis Set命令详解

    命令行解析额外参数 set命令共支持NX、XX、EX、PX这4个额外参数,在执行set命令时,需要首先对这4个参数进行解析,此时需要3个局部变量来辅助实现: robj *expire = NULL; int...value编码 为了节省空间,在将key-value设置到数据库之前,根据value的不同长度和类型对value进行编码。...在tryObjectEncoding函数结束时可能会修改o的值,所以贸然继续进行可能会造成其他影响,所以在refcount大于1的情况下,结束函数的运行,将o直接返回: if (o->refcount...robj的ptr字段本来是一个void*指针,所以在64位机器占8字节的长度,而一个long也是8字节,所以不论ptr存一个指针地址还是一个long型的值,都不会有额外的内存开销。...set命令调用setGenericCommand传递的参数如下: setGenericCommand(c,flags,c->argv[1],c->argv[2],expire,unit,NULL,NULL

    1.9K20

    C++面试题汇总 (一)

    允许在派生类中对基类的虚函数重新定义。  纯虚函数的作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。作为接口而存在 纯虚函数不具备函数的功能,一般不能直接被调用。 ...(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数...而引用更容易使用,更清晰。  在什么时候需要使用“常引用”?  如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。...格式:类型标识符 &函数名(形参列表及类型说明){ //函数体 }  好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。...注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

    1.2K20

    牛客网-CC++专项训练知识点总结

    成员函数(非const成员函数可以修改成员变量); C++的虚函数必须是类的一个成员,而不允许是类的友元; 纯虚函数是在基类中没有实现的函数,虚函数在基类中实现了,但在派生类中可能有不同版本的函数;纯虚函数是在基类中等于...0的函数;抽象类是含有纯虚函数的类;抽象类指针可以指向不同的派生类; 静态局部变量特点: 变量在全局数据区分配内存; 静态局部变量在程序执行到该对象的声明处是被首次初始化,以后的函数调用不用再进行初始化...; 静态局部变量一般在声明处初始化,若没有显式初始化,则会被程序自动初始化为0; 是总驻留在全局数据区,知道程序运行结束。...():为了与C语言进行兼容,不用做边界检查; 指针指向字符串时,字符串是常量,存储在常量区,而指针存储在栈区,不能对其操作修改; Nagle算法的规则; 若包长度达到MSS,则允许发送; 若包含有FIN...多文件结果的程序中,通常把类的定义单独存放在头文件中; 当基类构造函数需要外部传递参数才能够进行初始化时,派生类必须显式定义构造函数,为基类传递参数;基类如果不需要传递或可以不传递参数时,派生类可以不用显式定义构造函数

    1.2K30

    C语言基础之【内存管理】

    即使函数调用结束,静态局部变量的值也会保留,下次调用时不会重新初始化。 存储位置: 静态局部变量存储在 静态存储区(static storage area),而不是栈中。...这些函数可以对内存进行 填充、复制、比较、查找 操作。 通常定义在头文件中。...所以 printf("*p = %d\n", *p); 输出的是变量 a 的值,而不是新分配内存中的值 成功原因分析: 值传递机制:同样是值传递,在 main 函数中调用 fun(p) 时,p 的值...此时,p 和 tmp 都指向同一块动态分配的内存 fun函数内部操作:在 fun 函数中,*tmp = 100; 是对 tmp 所指向的内存中的值进行修改,也就是修改了动态分配内存中的值。...总结: 第一个代码中 fun 函数修改的是形参 tmp 本身的指向,而不是 tmp 所指向的内存中的值,由于值传递机制,形参的改变不会影响实参 第二个代码中 fun 函数修改的是形参 tmp 所指向的内存中的值

    20910

    【通俗易懂】关系模式范式分解教程 3NF与BCNF口诀!小白也能看懂「建议收藏」

    3NF要求每一个非主属性既不部分依赖于码也不传递依赖于码。 BCNF消除了主属性对候选码的部分和传递函数依赖。 注:1.相对于BCNF,3NF允许存在主属性对候选码的传递依赖和部分依赖。...2.BCNF比较抽象,略作解释:在学生信息表里,学号是一个候选码,学号可确定学生姓名;(班级,学生姓名)也是一组候选码,有(班级,学生姓名)->学号,因此在主属性间形成了传递依赖。...先求出R的最小依赖集, 假设B->G冗余,则(B)+=BD,没有G故不冗余。 假设CE->B冗余,则(CE)+=CEGDA,没有B故不冗余。 假设C->A冗余,则(C)+=CD,故不冗余。...例.关系模式R,有U={A,B,C,D,E,G},F={B->G,CE->B,C->A,CE->G,B->D,C->D},将关系模式分解为3NF且保持函数依赖 将关系模式分解为3NF且保持函数依赖: 第一步...由于候选码为(CE)因此将CE->B划分出子集(BCE),而B->G,B->D左侧均不含主属性(C、E)中的任何一个故划分出(BG),(BD) 第三步:此时剩余依赖F={C->A,C->D}剩余元素{A

    12.5K51

    nginx upstream模块完整逻辑源码分析

    下游的ngx_buf_t结构体 ngx_int_t (*input_filter_init)(void *data); //处理包体前的初始化方法,其中data用于传递用户...而不会去与error_page进行比较 unsigned change_buffering:1; // 当为1时,根据上游服务器返回的响应头部,动态决定是以上游网速优先,还是下游网速优先 ....更多的是在检测请求的状态,而实际的发送函数是 ngx_http_upstream_send_request,分析流程如下: static void ngx_http_upstream_send_request...ngx_http_upstream_cleanup函数在启动upstream时,会挂在到请求的cleanup链表中,当HTTP框架结束http请求时一定会调用到upstream_cleanup函数。...而ngx_http_upstream_next函数,是在处理请求的的流程中出现错误才会主动调用到,该函数通过重连服务器、选取新的服务器等策略来提高服务的可用性。

    3.4K01

    JavaC++中的赋值和拷贝分析及对比

    在frame中,保存有该方法调用的参数、局部变量和返回地址。  Java的参数和局部变量只能是基本类型的变量(比如int),或者对象的引用(reference)。...二、拷贝   拷贝发生的场景  1.赋值  2.参数传递  3.拷贝函数  4.拷贝构造函数   深拷贝 浅拷贝  浅拷贝:仅拷贝对象本身(对象包含的基本变量和对象包含的引用),而不拷贝对象包含的引用 ...(若不对clone()方法进行改写,默认浅拷贝)  赋值/参数传递 默认情况  在Java/Python中数据是按值传递的:  赋值=和拷贝copy()不同  基本数据类型:数值  对象:对象即对象引用...  (因此赋值和参数传递对象时,对象所指向的实体是一样的,对象的地址是一样的)  C++中:  基本数据:数值  对象:对象的赋值调用拷贝函数(特殊的创建对象是,用另一个对象对创建对象初始化时,调用拷贝构造函数...而不对对象进行修改时,参数传递一般直接传递对象的引用,并且通常用const限定使得函数不会改变对象的状态>  clone()方法默认情况  默认为浅拷贝,若要实现深拷贝需要重写拷贝函数

    1K30

    C语言基础知识梳理总结

    “值传递”,即单向传递,只有实参传递给形参,而不能由形参传递给实参。...static声明局部变量是在函数调用结束后不消失而保留原值,即占用存储单元不释放,在下一次调用该函数时,该变量已有值,就是上次函数调用结束时的值。...其中需要说明的是在定义局部变量不赋初值的话,则静态局部变量编译时自动赋值为0或者空字符,虽然静态局部变量在函数调用结束后仍然存在,但是其他函数不能引用它的。...静态局部变量主要用在当初始化后,变量只是被引用而不改变其值。...在一个文件中,如果定义之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量做外部变量声明。在多文件中,也可以采用extern声明的办法进行外部变量声明。

    1.2K10

    【小陈背八股-C++】Day01- 为什么你的变量活得比别人久?指针为何总惹祸?

    局部变量:在函数内定义,生命周期和作用域只能在声明该变量的函数内或类内访问。每一次调用需要被重新创建,生命周期随着函数的返回而结束。被创建在栈上。...(默认为0),之后的值会保留默认初始化为0不赋值的话不确定(随机值)存储位置数据段或BSS段(非栈),可长期保存数据段或BSS段,可长期保存栈(速度快,但并不持久)适合场景想要在函数中记住之前的值(统计次数...其生命周期不会随着函数的结束而被销毁。 第一次被调用时进行初始化(默认值为0),之后的调用不会再次进行初始化,会保留上一次调用结束的值。和局部变量一样存储在静态存储区。...局部变量: 定义在函数内部,这种变量的特点就是“随用随弃”,生命周期随着函数的调用结束而销毁。 如果不赋值的话将会是一个随机值,因为存储在栈中所以存取速度很快。...静态局部变量:适用在函数需要“记住上一个值”情况,例如在函数中设计一个计数器、记录某一个初始化状态,那可以在变量前面加上一个static,函数每一次运行都能够记住之前的结果。

    17210

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

    ”,即单向传递,只有实参传递给形参,而不能由形参传递给实参。...还要注意若果同一源文件中,外部变量和局部变量同名,则在局部变量作用范围内,外部变量被“屏蔽”,不起任何作用。...Static声明局部变量是在函数调用结束后不消失而保留原值,即占用存储单元不释放,在下一次调用该函数时,该变量已有值,就是上次函数调用结束时的值。...其中需要说明的是在定义局部变量不赋初值的话,则静态局部变量编译时自动赋值为0或者空字符,虽然静态局部变量在函数调用结束后仍然存在,但是其他函数不能引用它的。...静态局部变量主要用在当初始化后,变量只是被引用而不改变其值。

    2.3K40

    初识函数栈帧的创建与销毁(笔记)

    接下来,编译器会在栈帧中初始化一部分空间,即栈顶指针(ESP)和栈低指针(EBP)之间的空间,并为函数的局部变量和参数在栈帧中分配存储空间。未初始化的局部变量会包含随机值。...这个拷贝的目的是为了在函数调用过程中能够访问到函数的局部变量和参数。 5. 为局部变量分配存储空间 在完成上述步骤后,编译器会在栈帧中为局部变量分配存储空间,并初始化其中的部分空间。...优化函数参数传递方式 在函数调用过程中,参数的传递方式可能会影响函数栈帧的大小。可以考虑优化参数传递方式,例如使用指针或引用传递参数,以减少函数栈帧的大小和降低内存占用。 3....但是要注意,使用寄存器传递参数可能会对代码的可读性和可维护性产生影响,因此需要在具体情况下进行权衡和选择。 一些能解释的问题: 1.局部变量是怎么创建的?...首先为函数分配好栈桢空间,栈桢空间里初始化一部分的空间之后, 然后给局部变量在栈桢中分配一点空间 2.为什么局部变量不初始化时值是随机值?

    61410

    云风coroutine协程库源码分析

    而协程无需考虑这些 将异步流程同步化处理:此问题在知乎上有非常多的经典回答。尤其在RPC中进行多服务并发协作的时候,相比于回调式的做法,协程的好处更加明显。...C->ctx.uc_link = &S->main; 如果协程执行完,则切换到S->main主协程中进行执行。如果不设置, 则默认为NULL,那么协程执行完,整个程序就结束了。...那么,为什么不直接传struct schedule*呢,而要这么做,通过先拆两半,再在函数中拼起来?...在coroutine中, 也就是开始执行mainfunc这个函数。(mainfunc是对用户提供的协程函数的封装)。...swapcontext(&S->main, &C->ctx); 交换上下文。这点在上文有具体描述。 状态机转换 在coroutine中协程定义了四种状态,整个运行期间,也是根据这四种状态进行轮转。

    1.8K50

    ​浅谈协程

    线程真实栈内存使用会随着线程执行而变化,如果线程只使用了少量局部变量,那么真实线程栈可能只有几十个字节的大小;系统在维护线程时需要分配额外的空间,所以线程数的增加还是会提高内存资源的消耗。...此后,函数 Ping 和 函数 Pong 在 while (1) 中交替执行,而不再返回 main 函数中。 最后,当 iter > max_iteration 时,调用 exit(0) 退出。...我们先看下协程在 READY 状态下进行 coroutine_resume 的流程: 这块代码比较短,但是非常重要,所以我就直接贴代码了: // 初始化 ucontext_t 结构体,将当前的上下文放到...->main 主协程中进行执行;如果不设置,则默认为 nullptr,那么协程执行完,整个程序就结束了。...为什么不直接传 Schedule*,而要这么做,通过先拆两半,再在函数中拼起来呢?

    2.4K73

    C语言函数

    思维导图一、函数的基本结构1.1从重复劳动中解脱如果你发现自己在复制粘贴代码,停下来,把它封装成函数。...如果函数foo()的定义写在main()后面,而main()中调用了foo(),编译器会困惑:“这是个啥?”...局部变量(过目不忘):展开代码语言:CAI代码解释voidstatic_func(){staticinti=0;//只在程序启动时初始化一次!...题目7:全局变量如果不初始化,它的默认值是多少?题目8:static局部变量如果不初始化,它的默认值是多少?题目9:下面代码会发生什么严重问题?...详解:栈上的局部变量内存如果不手动清理,里面存的就是上次遗留的数据,可能是任何值。题7解析答案:0。详解:全局变量存储在静态数据区(BSS段),编译器保证它们默认初始化为0。题8解析答案:0。

    13610

    CC++面试题之语言基础篇(一)

    : 6.1 malloc()与free ()是C语言的标准库函数,new/delete是C++的运算符,所以new/delete不 需要头文件进行声明; 6.2 new/delete可以调用构造函数和析构函数...局部变量:局部作用域,比如函数的参数,函数内的局部变量等等。 静态局部变量 :局部作用域,只被初始化一次,直到程序结束。 从所在空间考虑:除了局部变量在栈上外,其他都在静态存储区。...生命周期: 局部变量在栈上,出了作用域就回收内存;而全局变量、静态全局变量、静态局部变量都在静态存储区,直到程序结束才会回收内存。...而内联函数本质上是一个函数,比如有返回值、参数列表等 宏函数是在预编译期做简单字符串替换 ;而内联函数则是在编译期进行代码插入 宏定义是没有类型检查的,无论对还是错都是直接替换;而内联函数在编译的时候会进行类型的检查...关键字不同: 内联函数使用 inline 关键字进行声明,而普通函数不需要。 编译时展开: 内联函数在编译时展开,而普通函数则在运行时进行函数调用。

    92510

    开讲啦:Chap 07 用函数实现模块化程序设计

    一个源程序文件由一个或多个函数以及其他有关内容(如指令、数据声明与定义等)组成。一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进行编译的,而不是以函数为单位进行编译的。...数据分别存放在静态存储区和动态存储区,全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放,在程序执行过程中它们占据固定的存储单元,而不是动态地进行分配和释放。...7.9.2 局部变量的存储类别 自动变量auto 函数中的局部变量,如果不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。...int b,c = 3; 与 auto int b,c = 3;等价 静态局部变量static 有时希望函数中的局部变量的值在函数调用结束后不消失而继续保留原有值,即其占用的存储单元不释放,在下一次调用该函数时...,即只赋初值一次,在程序运行时它已有初值,以后每次调用函数时不在重新赋初值而只是保留上次函数调用结束时的值,而对自动变量赋初值,不是在编译时进行的,而是在函数调用时进行的,每调用一次函数重新给一次初值,

    81010

    第十节(变量作用域)

    注意,并未将x作为参数传递给print_value()函数,该函数在第19行将x作为参数传递给printf()。...如果程序中只有部分函数需要访问一个变量,应将该变量作为参数传递给函数,而不是让它成为外部变量。 2.3 extern关键字 当函数使用外部变量时,最好在函数内使用extern关键字声明该函数。...因此静态变量仍保留函数退出时的值。而自动变量在每次调用函数时都会被初始化为指定的值。...如果改动程序清单4,在声明时不初始化两个局部变量,第17^23行的func1()函数如下: void func1 (void) //17行 { static int x; int...如果某些变量只供少数函数使用,不 要把这些变量都声明为外部变量。 更好的做法是将其作为参数传递给函数不要把非数值变量、结构、数组声明为寄存器变量。

    78740
    领券