在一个类里面有这样的语句 :static int a = 5 那么这句话不是给赋值了,给 a 赋

在一个类里面有这样的语句 :static int a = 5 那么这句话不是给赋值了,给 a 赋值不就等于给a开辟内存空间,开辟了内存空间不就是定义吗?但是书上说这是声明。effective c++。
请问我的逻辑错在哪里了?如果没有开辟内存空间,又是如何存储 5 这个右值的?

声明和赋值是两个概念,不冲突。声明静态变量的同时会给它赋值,这时候的内存开辟是一次性的,之后不会变。你所理解的赋值,其实指的是动态创建的变量,因为在变量创建出来之前程序不知道把它放哪儿,所以必须等创建时才能给它分配空间。追问

动态创建的变量?是不是指运行期赋值,而静态的就是编译期?

追答

是的。

追问

疑问来自这句话:然而你看到的Numturn不是定义而是声明。
我觉得这个明明就是定义啊。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-05-27
因为真是静态的,a值不能改追答

相当于#define A 5
所以是声明

因为static是静态的

第2个回答  2015-05-27

int a=5,*p1=&a,*p2;则不能正确赋值的语句是?
int a = 5;int* p1 = &a;int* p2;选项A.*p1 = 10:因为p1存着a的地址,所以*p1就是a, 相当于a = 10,所以没问题 选项B.p2 = &a:因为和p1的赋值方式一样,都是a的地址,所以可以通过编译 选项C.*p2 = 10:p2还没初始化,属于野指针(也就是不知道指向那块内存),那势必会改...

用static 定义的数组不赋初值,那还定义它有什么用
你理解错了。static只是指定将其存储在静态存储区。不同于一般变量,一般变量在运行时候由程序分配内存,而静态变量编译的时候就将分配内存,比如你的问题中,a将被赋值为3,然后,如果你在程序中写a=a+1;a就会变成4,静态变量和一般变量唯一的不同就是整个程序运行期间都将存在。她所在的内存不会被...

char a=5,把一个整数赋值给一个字符型变量,不理解什么意思,是数字5...
你好:你没有理解错,不是把5赋值给a,也不是把5的ASCII赋值给a,而是把ASCII值为5的字符赋值给a。include <stdio.h>int main(){char a=5;printf("%c\\5",a);\/\/输出ASCII值为5的字符}

java中使用static声明的变量是否必须赋初值
static 变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多...

C语言中 在一个函数中用 static修饰的变量,还能给它赋上新值吗?
可以,static在C语言中是表示一个变量为静态变量的,而不是常量,也不是不可变的变量。所谓的静态变量有两种情况,一种是静态全局变量,一种是静态局部变量。像在VB,C#,C,C++,Java,PHP,Objective-C,JavaScript中我们可以看到static作为关键字和函数出现,在其他的高级计算机语言如FORTRAN、ALGOL、...

int f(int e){ static int a=0; a=a+e; return
sorry,刚刚找了一下书,确实是1,2。你把static去掉就变成1,1了!

c++类里定义的字符型数组const char a[5]怎么赋值?
strcpy(a,"abcde");(3)用 memcpy 把另一个数组里的值传给它 memcpy(a,b,5);(关键注意 a[i] 不能做左值,用赋值语句赋值,因为 它是 const.)在 c++ class 里,也 用 c 语言 的 同样 方法。只是 头文件 要包含:include<iostream> include <string> using namespace std;include <...

这个c语言代码错哪里了?
但C语言中,“=”是赋值运算符,“==”是关系运算符。如:if (a==3) a=b; 前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。5、忘记加分号 分号是C语句中不可缺少的一部分,语句末尾必须有分号。a=1 b=2 编译时,编译程序在...

若int a=5, *p=&a; 1.那么 a ,&a, p, *p的区别是什么? 2.如果&*p, *...
对于int a[5],*p;p=a; 或p=&a[0]是正确的 p=&a严格来说是错误的 首先要搞清楚a与&a的区别:a表示数组首元素的首地址,即元素a[0]的地址;&a表示整个数组的地址。二者的值是相同的,但意义并不一样。正如成都市政府与四川省政府的地址都在成都,但二者表示的含义不同。如下图所示,a...

Java程序运行时,没有赋值的基本类型变量会在内存中分配空间吗?_百度...
基本类型的变量如果是临时变量,只要定义了,就会分配内存空间,不管是否被赋值;如果是作为对象的属性出现,只要该对象不实例化,就不会分配内存空间。一个完整的Java程序运行过程会涉及以下内存区域:1、寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。2、 栈:保存局部变量的值,包括:1)用来...

相似回答