当前位置:首页 » 编程语言 » c语言static与const

c语言static与const

发布时间: 2022-12-09 05:17:21

⑴ 关于c语言auto变量和static变量区别

一、主体不同

1、auto变量:是一个C/C++语言存储类型,仅在语句块内部使用。

2、static变量:在计算机编程领域指在程序执行前系统就为之静态分配存储空间的一类变量。

二、作用域范围不同

1、auto变量:初始化可为任何表达式,其特点是当执行流程进入该语句块的时候初始化可为任何表达式。

2、static变量:针对某一源文件的以static声明的文件级变量与函数的作用域只限于文件内(只在文件内可见),也即“内部连接”,因而可以用来限定变量的作用域。


三、特点不同

1、auto变量:具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。

2、static变量:在函数内以static声明的变量虽然与自动局部变量的作用域相同,但存储空间是以静态分配而非默认的自动分配方式获取的,因而存储空间所在区域不同。


⑵ c语言中const、static关键字的用法

  1. const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

  2. const可以修饰变量,函数的入参,函数的返回值

  3. static第一个作用:隐藏

    当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。

  4. static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。

  5. static的第三个作用是默认初始化为0。其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。

⑶ c语言中const 与static的分析

const 仅仅是说在内存分配的同时就被初始化了,之后就不能更改了。
我觉得这分析不见得就对,使用全局的const变量固然能达到目的,但是太多的全局变量造成的结果是职责不明确,程序逻辑令人费解。更好的做法是,它适合在哪里就在哪里,比如有一个Circle类表示圆,里面有个const static double PI(static的目的是为了所有该类对象共享这个变量,否则会为每个该类的对象分配一个pi),表示圆周率,我觉得放在Circle类中是很合理,但是把它作为全局变量,在小程序里固然还是结果清晰,一旦程序大了,分成好几十个文件了,逻辑就乱了

⑷ C++面相对象的static const成员变量有什么作用是静态常量,不是单独的const或者static。

静态常量是类的变量的一种,首先是静态的,表示其在程序开始的时候就有了内存,是属于类的。
然后是常量,表示其值只能被赋一次。它是唯一可以这么赋值的成员函数,static const int a=11;
或者还能在类声明外面赋值,const int ATest::a=111;

⑸ C语言中static,const和static const 的区别

来看个例子:

在第一次调用test()时,如果static int b没有被我赋初值,也会被默认赋值成0。然后执行自增运算,所以输出1。第二次调用test()时如果是普通的变量,则会被重新分配内存,但static类型的变量上次执行test函数之后没有被释放,而是保存在全局变量区,所以继续加一变成2。

对比一下非static的变量会怎样:

⑹ 关键字static、Const、Volatile的作用是什么

在C语言中,关键字static有三个明显的作用:
1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数
据和代码范围的好处和重要性。
我只要一听到被面试者说:“const意味着常数”,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着“只读”就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)如果应试者能正确回答这个问题,我将问他一个附加的问题:下面的声明都是什么意思?
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:
2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:
1). 并行设备的硬件寄存器(如:状态寄存器)
2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3). 多线程应用中被几个任务共享的变量
假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。
int square(volatile int *ptr){return *ptr * *ptr;}下面是答案:
1). 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。
2). 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。
3). 这段代码的有个恶作剧。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:
int square(volatile int *ptr){int a,b;a = *ptr;b = *ptr;return a * b;}由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:

⑺ const和static const的区别

const和static const的区别:

一、全局的区别

const规定变量在全局中是只读的变量,并且它的值无法被修改。

static const规定变量在当前的模块中是只读的变量,无法再全局中被其他模块读取。

二、文件的区别

const定义的指针,不赋初值编译时不报错,在初始化时应说明指针的指向。

static const不能在定义对象时对变量初始化,就是不能用构造函数来初始化。

三、函数的区别

const只能通过构造函数初始化列表进行,并且必须有构造函数。

static const是静态的,属于类的静态成员函数。

四、类的区别

const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同,所以不能在类声明中初始化const数据成员。

static const初始化在类体外进行,初始化时不加该成员的访问权限控制符private,public等,并且初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

⑻ 关于C语言中return以及static const的问题

return作为一个函数的返回值的
而static const是定义静态变量的

⑼ 在C语言中,register,const,static,extern分别都是什么意思,有什么用

register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。
const限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。
static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。
extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。

热点内容
安卓市场手机版从哪里下载 发布:2025-05-15 20:17:28 浏览:813
幼儿速算法 发布:2025-05-15 20:15:08 浏览:86
best把枪密码多少 发布:2025-05-15 20:13:42 浏览:548
android安装程序 发布:2025-05-15 20:13:20 浏览:559
c语言跳出死循环 发布:2025-05-15 20:06:04 浏览:824
a19处理器相当于安卓哪个水平 发布:2025-05-15 20:05:29 浏览:639
荣耀9i安卓强行关机按哪个键 发布:2025-05-15 20:00:32 浏览:750
密码锁写什么最好 发布:2025-05-15 19:05:31 浏览:782
5的源码是 发布:2025-05-15 19:04:07 浏览:719
c语言创建的源文件 发布:2025-05-15 18:54:08 浏览:611