函数里的局部变量在函数退出后会不会自动释放?
你是怎么理解“释放”的?释放了那几个存储单元就不存在了?你的代码只说明函数f退出后,存放100和12的那8个内存单元暂时还没有被别的代码使用而已,并不能断定“没有被释放”。释放的意思是那几个存储单元不再由你的代码“霸占”了,而并不是“消失”了……
两者的区别只在于作用域和生存周期。main函数是一个进程的入口,此外,和别的函数无区别。
1、main函数里定义的是局部变量,只是在main函数里有效。
2、如果程序里有多个函数,定义的全局变量在这些函数里都可以使用,而在main中定义的只能在main中使用,其他函数不可以直接调用。
3、题目中的两个程序的区别只在于程序一的a和s变量是全局变量,程序二的a和s变量是局部变量。
4、全局变量是程序的各个函数都可以调用的,而局部变量只在函数内部有效。
扩展资料:
全局变量是编程术语中的一种,源自于变量之分。
变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。
全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。
局部变量(Local variables)指在程序中只在特定过程或函数中可以访问的变量。局部变量是相对于全局变量而言的。在C++、C#、Ruby这些面向对象语言中,一般只使用局部变量。
面向对象编程是现在普遍采用的是软件开发方法,因此无需考虑是局部变量还是全局变量,说到变量,往往都是局部变量。
参考资料:百度百科-局部变量
参考资料:百度百科-全局变量
会自动释放,指针也是一样的。
局部变量的作用域是定义该变量的函数或定义该变量的复合语句。只在定义它的函数或复合语句范围内有效,只能在定义它的函数或复合语句内才能使用它们。局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。
扩展资料:
局部变量的作用域说明:
1、主函数main()中定义的变量也只在主函数中有效,而不能因为在主函数中定义在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。因为主函数也是一个函数,它与其他函数是平行关系。这一点是与其他语言不同的,应予以注意。
2、不同函数中可以使用相同名字的变量,它们代表不同的对象,分配不同的单元,互不干扰。例如,上面在f1函数中定义了变量b和c,倘若在f2函数中也定义变量b和c,它们在内存中占不同的单元,互不干扰。
3、形式参数是属于被调函数的局部变量。例如上面f1函数中的形参a,也只在f1函数中有效,其他函数可以调用f1函数,但不能引用f1函数中的形参a。
4、在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。
参考资料来源:百度百科-局部变量
局部变量肯定会释放,一般由内核在栈上释放,假如在函数里申请了,就得记得,那个申请到的地址释放后,指向的指针会成野指针。
关于局部变量里的函数:
在C语言中在函数里面定义的局部变量确实会在函数结束之后被释放掉,
例如:
void print()
{int a=0;
printf("%d",a);}
当函数调用完之后a所占用的内存控件就被释放掉了,实际上局部变量的存储空间都是放在栈上面的,当函数返回之后,关于此函数的栈数据都被弹出,函数内部的局部变量占用的内存空间也被释放。但是你通过malloc函数分配的内存空间并不是在栈上,而是在另一个特殊的区域,也就是堆,堆中分配的内存是不能自动被释放的,必须要程序员手动释放,在c中提供了free函数对malloc分配的内存空间进行释放,如果不释放就会造成内存泄漏。
不知道有没有面向对象语言的基础,例如C#,Java,C++。在C#和Java中都提供了一种叫垃圾回收器的机制,可以自动回收堆内存,而不需要程序员手动释放,这给了程序员极大的方便,也极大的避免了C和C++中的内存泄漏的问题。在C++中对象的创建如果是通过new关键字来创建的,那么对象使用完成之后必须通过delete关键字进行释放内存控件。因为实际上new关键字将对象分配在堆内存。
这里有两个概念:指针变量本身;它所指向的内存区域。
函数退出后,指针变量本身(4个字节,一般在栈上)会被释放,但它所指向的内存区域不会被释放。
楼主的例子里,如果在method()里不释放b指向的空间,那么当method()退出时,b指向的空间不会被自动释放,而b这个指针变量不再存在了。这样一来b指向的空间就永远地泄漏了,因为再也没有指针指向它,你永远找不到它了。
如果出于某种原因不想在method里释放这块空间,可以在method()里把b的值赋给一个全局指针变量,以后再释放这个全局变量。
未赋值的局部变量,在函数里和函数外系统会自动赋值吗?如果是静态局部变 ...
函数外的变量就是全局变量,未赋值的,自动初始化为 数值 0 或者 空。函数内的变量就是局部量,未赋值的,要看编译器,有的 处理为不定值,有的编译器也初始化为 数值 0 或者 空。静态局部变量,只是强调它的生命期 同 程序的生命期, 退出函数调用时,它的数值保留着,下次调用时将以它...
变量定义在函数内部还是函数之外?
程序的编译单位是源程序文件,一个源文件可以包含一个或若干个函数.在函数内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,外部变量是全局变量(也称全程变量).全局变量可以为本文件中其他函数所共用.它的有效范围为从定义变量的位置开始到本源文件结束.
在函数内部定义的变量称作( )变量
在函数内部定义的变量称作局部变量。局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量。局部变量的作用域是定义该变量的函数或定义该变量的复合语句。局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。在Java等面向对象语言中,也可能出现多个局部变量重名的情况。...
全局变量和 局部变量的区别?
区别:局部变量:“在函数内定义的变量”,即在一个函数内部定义的变量,只在本函数范围内有效。全局变量:“在函数外定义的变量”,即从定义变量的位置到本源文件结束都有效。当有外部变量时,main函数中的同名变量就是全局变量。如果没有外部变量,main函数里的变量依然是局部变量。目的:增加函数间数据...
为什么在函数中创建一个局部变量后整个函数占用flash变大很
1、局部变量存储在函数的栈帧中:当函数被调用时,会在栈中创建一个新的栈帧,用于存储局部变量、函数参数等。这些局部变量会占用一定的Flash空间。2、函数代码的复制:在函数被调用时,函数的代码会被复制到内存中,以便后续执行。这个过程也会占用一定的Flash空间。3、调用栈的增长:随着函数嵌套的加...
php中局部变量和全局变量在哪里创建
在 PHP 中,局部变量和全局变量是在不同的作用域中创建的。局部变量是在函数或方法内部创建的,其作用域仅限于函数或方法内部。在函数或方法中定义的变量,只能在函数或方法内部访问,并且在函数或方法执行完毕后就会被销毁。例如,下面的代码定义了一个函数 test(),在函数内部创建了一个局部变量 ...
函数内的局部静态变量为什么在其他函数内无法访问
除非调用这个函数,否则函数内的什么变量在其他函数内都无法访问。你的意思可能是认为“静态变量是永久性的,所以在其他函数内应该可以访问”,但事实是函数内的静态变量也是“局部”变量,所以它只能在声明它的函数内部可见。
c语言定义变量的时候可以指定范围吗?
在C语言中,变量的使用范围通常分为全局变量和局部变量。全局变量是在程序的任何地方都可以访问的变量,它们的定义在程序的开始部分。全局变量的作用域是从它们的定义位置开始,到程序的结束位置结束。全局变量的声明和定义可以使用extern关键字,也可以直接声明和定义。局部变量是在函数内部定义的变量,它们...
C 语言中全局变量、局部变量、函数参数个是在什么时候分配内存空间...
全局变量是在main函数之前就分配 局部变量在定义时分配,超出作用域后释放 静态局部变量只分配一次,程序退出后才释放 函数参数与局部变量基本上相同在进入函数时分配,函数结束时释放
请教高手,C语言中,把变量定义在主函数之外和定义在主函数之内有什么区别...
两者的区别只在于作用域和生存周期。main函数是一个进程的入口,此外,和别的函数无区别。1、main函数里定义的是局部变量,只是在main函数里有效。2、如果程序里有多个函数,定义的全局变量在这些函数里都可以使用,而在main中定义的只能在main中使用,其他函数不可以直接调用。3、题目中的两个程序的区别...
訾昨益爽: 局部变量,离开该函数就会被delete,如果要让它能继续使用,将其声明为全局变量
文水县18595998911: c语言初学者,不是说局部变量会在函数结束时被释放吗,为什么这个程序没有呢? - ?
訾昨益爽: 你是怎么理解“释放”的?释放了那几个存储单元就不存在了?你的代码只说明函数f退出后,存放100和12的那8个内存单元暂时还没有被别的代码使用而已,并不能断定“没有被释放”.释放的意思是那几个存储单元不再由你的代码“霸占”了,而并不是“消失”了……
文水县18595998911: 多线程有关全局变量和局部变量的区别,注意a,b - ?
訾昨益爽: (1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失.静态局部变量始终存在着,也就是说它的生存期为整个源程序. (2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只...
文水县18595998911: C语言中静态局部变量的问题 - ?
訾昨益爽: 静态局部变量相当于全局变量(只是只有在这个函数中能访问,但是生命周期是和全局变量差不多的),函数退出之后变量还在,而且只在第一次进入的时候做初始化,以后会跳过初始化语句,保留原来的值(也就是说,如果item是static的,那么只有在第一次进入这个函数的时候会执行item=0,以后都不会执行.).
文水县18595998911: 在函数中定义static 的变量,会在函数结束后释放吗? - ?
訾昨益爽: 不会在函数结束后释放,但是会在程序结束后释放.
文水县18595998911: c语言.调用完函数后(main函数外面的函数)函数里面的指针消失了吗?没有 - ?
訾昨益爽: 如果指针是局部变量 退出函数的时候 就会被释放 这样 指针变量的值是什么 其实没什么关系了 也不会产生野指针 如果没有申请内存,或者申请内存后,传到主调函数,在其它地方释放,就不会产生内存泄露 链表删除的时候 free(p)就好. 这个就是释放内存 一般被释放的 没必要赋值为NULL 删除节点的时候 重要的是把前驱的next赋值为NULL 否则就是 野指针了.
文水县18595998911: 局部变量的作用域可用于其它函数的调用 这句话是否是对的,为什么? - ?
訾昨益爽: 这句话不准确,如果在main函数里面定义的变量在main函数的作用范围里可以传递给其他函数,如果在除主函数的其他函数的里的局部变量会随着函数的结束而释放空间,所以不能再供别的函数传递参数.而main函数的局部变量时程序运行完后才释放空间的,程序运行完钱可以传递给其他函数