c中说局部变量分为auto和static ,auto变量在动态存储区中分配空间,函数调用结束后空间回收。

作者&投稿:商乐 (若有异议请与网页底部的电邮联系)
C++中static函数与static变量的区别~

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误.
1.静态函数有两种,类中的成员函数和你说的这种,就是全局的,静态的全局函数表示只能被当前“.cpp”文件所使用,当外部用extern关键字声明之后也是无法使用的,如果不是静态函数,外部只要用extren声明一次就可以调用这个函数了;

2.静态变量要分为3种,a.类中的成员;b.函数中的静态变量;c.静态全局变量;
静态全局变量和静态全局函数一样,只能被包含的“.cpp”文件调用,外部无法用extern声明并使用;类中的成员其实可以当作一个全局变量,不过它的特点是只能用在该类里面,它并不属于任何一个成员,而是属于整个类;

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝.

在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。
1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)
2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。

c语言中static的语义
1.static变量:
1).局部
a.静态局部变量在函数内定义,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。
b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。

2).全局全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局 变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。
2.static函数(也叫内部函数)
只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。区别于一般的非静态函数(外部函数) static在c里面可以用来修饰变量,也可以用来修饰函数。 先看用来修饰变量的时候。变量在c里面可分为存在全局数据区、栈和堆里。其实我们平时所说的堆栈是栈而不包含对,不要弄混。

static成员函数,虽然是“成员”函数,但是他并不是真是成员,而是一个全局函数,只不过作用域受到类的约束而已(即public才能当全局,非public只能在本类对象中使用)。
既然是类似于全局函数,就和对象无关了。
你要在static成员函数中,使用某类的成员变量的话。你要首先保证某类的“对象”的存在,没有"对象"也就没有对象的成员变量。而static成员函数是全局函数,不依赖于"对象"的,即不需要创建出"对象"也可以调用static成员函数。所以调用static成员函数的时候,此函数归属的"对象"是不存在的(static根本没有归属的对象)。因此“使用类的成员变量”这句话的“类”对象是不存在的。
static函数没有归属的对象,自然也就使用不了对象的成员变量。但是它可以修改其他对象的成员变量。
你可以创建一个"对象",再把"对象"作为参数,传递给static函数,然后再在static函数内修改此对象参数内部的成员变量,即可。

啥动态呀,,动态是malloc出来的内存

head已经返回出来了 head的值是可以得到的, 看好 是head的值 是*head的值
create函数返回的是一个指针,,,,那么可以根据head来找到下一个结点 接着再找下一个,这是链表的特点。。。

你这里问的主要是在主函数里面怎么能打印出来,那么我告诉你,在create里面 一定调用了malloc函数来从堆里面动态分配出来的内存保存数据,,,
如果不是那不可能打印的,,,,

struct stu* create(int n)
{
struct stu *head,*p,*back;
/ 创建若干个节点的链表
return head;
}
这个地方如果是这样
struct stu* create(int n)
{
struct stu *head,p,back;//没有那些* 也不用malloc分配内存的话 在这个函数运行完了之后 p和back都被释放掉了 也就打印不出来了。。。
/ 创建若干个节点的链表
return head;
}

C里面 给链表里面的节点赋值之前都需要用函数malloc声请空间的 不然会报错。 既然用malloc声请了空间 那么该链表里面的所有节点就是static的类型了

局部变量什么时候消失
答:局部变量实在语句块中定义的,当此语句块执行完后就消失,不过有个静态局部变量,一直不消失,直到程序结束,期间只能被初始化一次,保存的值不消失,可用于累计 在面向对象中就是可被多个对象共有

C语言中什么是局部变量,局部变量存在的各种形式及作用域
答:局部变量即内部变量,指在函数内部定义(也可认为在块内定义)的变量,其作用域仅为函数内部或块内。局部变量可以以auto(自动型)、(static)静态型、(register)寄存器型存储类型存在。

c语言中局部变量缺省的存储类型是什么
答:应该是 auto 自动变量。局部变量缺省是 自动变量 作用文件部位的缺省是 静态变量

C语言中的自动变量和寄存器变量是什莫?
答:C语言的变量存储类有:自动类、寄存器类、静态类和外部类。关键字auto加在变量名及其类型前,用来说明它是自动变量。局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进 行说明, 当auto省略时, 所有的非全程变量都被认为是局部变量, 所以auto实际上 从来不用。 局部变量在函数...

c语言auto是什么意思(电脑显示上的AUTO是什么意思)
答:内存auto是什么意思 是一个C/C++语言存储类型,仅在语句块内部使用,初始化可为任何表达式,其特点是当执行流程进入该语句块的时候初始化可为任何表达式。for循环内int i 和auto的区别 没什么区别。函数中的局部变量,如果不专门声明,为static存储类别,都是动态分配存储空间的数据存储,在动态存储区中。

C语言,局部变量全局变量
答:你K是自动变量,又不是静态变量,在主函数的循环中,每次循环,都调用一次该函数,每调用一次该函数,就重新定义K一次。所以k的值总是被重新赋为1,然后++k,即k=2;静态变量才会保存每次调用后的结果 你的输出结果明显写了 100+2+1 //那个2就是K的值咯。

C语言的基本变量存储类型的初值,以及作用范围.生存期的概念和关系
答:变量分类特性表存储方式存储类型说明符何处定义生存期作用域赋值前的值可赋初值类型动态存储自动变量 auto 寄存器变量 register 函数或复合语句内被调用时在定义它的函数或复合语句内不定基本类型int或char外部变量extern函数之外整个源程序整个源程序静态局部变量static 函数或复合语句内静态全局变量static 函数...

C语言中的“局部变量”是什么意思?
答:三。C语言中的变量存储分类指定 ? ?? ? auto ? ? auto称为自动变量 如果函数不做其他说明的话 均为自动变量 ? ? static ? ? static称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。? ? 1. 静态局部变量 ? ?? ???它与局部变量的区别在于: 在函数退出时, 这个变量始终存在...

在C语言中,___存储类型的变量,只在使用时才分配空间。
答:`auto` 存储类型是 C 语言中的默认存储类型,通常用于描述函数内部定义的局部变量。这些变量在定义时不会被初始化,而是在函数执行到定义语句时才会分配存储空间,并且在函数执行完毕后自动释放所占用的空间。`register` 存储类型用于告诉编译器将变量存储在寄存器中,以提高访问速度。由于寄存器数量有限,...

AUTO数值是什么
答:自动存储期和静态存储期。其中auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。在函数内部定义的变量成为局部变量。在某些C语言教材中,局部变量称为自动变量,这就与使用可选关键字auto定义局部变量这一作法保持一致。