yydg.net
当前位置:首页 >> stAtiC int A >>

stAtiC int A

static int a 你可以理解成全局变量,如果你是在类a中声明的,那么你无论new 多少个a, 那么你访问a.a,都共享同一个值.而 int a, 在不同的a实例里的值是独立的.

static int a是一个静态的变量,被所有该类的实例化对象所共享使用.而int a 则是一个简单的实例变量.

1、影响作用域static int i; /* i只在本文件中可见,即你不能通过extern引用 */int i; /* i可在别的文件中通过extern引用 */2、影响存储的区域static int i; /* 编译器在编译时,会将其存储在静态存储区 /int i; /* 会存储在全局数据区 */但是,二者在编译时,如果不明写初始化,编译器会自动把二者初始化为0,这点二者相同.

static int a; (a==0)&&(a=-1)&&(a=2) &&表示与操作即前后表达式都为真则整个表达式为真 他的操作运算方法是先检测前面的如果为真则检查后面的.如果前面的为假则跳过后面的表达式直接判定整个为假 看你的例题: static int a; (a==0)&&(a=-1)&&(a=2) a==0因为a刚定义系统初始值为0所以表达式为真.做a=-1 这个是一个赋值语句在做真假判断的时候赋值语句为真此时判定整体为真其中a的值为-1,系统继续做a=2同样这也是个赋值语句此时判断真假为真.所以整体 (a==0)&&(a=-1)&&(a=2) 为真而a得值为最后赋值的数既是2

14!考虑作用域及可见性的问题,以及++的用法按照程序执行的顺序来分析i = 0 时,定义了int a ,a的作用域仅仅在int a=3;k+=f(a);语句中,执行完后a就被释放了.先做f(3),此时在f(3)的stack区中c = c+1,执行完后c=4;(a++)+c的值是2+4=6,

静态变量

表示a是一个静态变量根据它的位置 可以是静态局部变量或者静态全局变量初始化值为1在程序整个生命周期内它的空间不会被释放

静态变量,就是下次调用这个变量的时候继续保持上一次的值~

static int a[][3] = { { 1, 2, 3 }, { 4, 9 }, { 7 } }; static int *p[3] = { a[0], a[1],a[2] }; int i = 0; while (i++ *(*(p + i)) = *(*p + i) + 3; printf("%d\n", *p[0]); printf("%d\n", *(*(p + 1))); *p->指向a[0] **p->指向a[0][0] *(*p+1)指向a[0][1] *(*(p+1))指向a[1][0]; *p+1 和p+1 区别

由于C语言中数组是按行排列的,所以a[2][-2] = a[2][0] 向前移动两个数,也就是a[1][2] = 6 a[1][3]从变量watch窗口中可以看出直接是0.所以结果是6 附内存布局图:

网站首页 | 网站地图
All rights reserved Powered by www.yydg.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com