C语言里的一个运算...和一些其他问题

来源:百度知道 编辑:UC知道 时间:2024/05/20 14:30:11
我想问下这是什么意思

a*=2+3

还有

在定义语句中赋初值的auto变量和static变量的初值是什么??
解释下这两条语句..

还有一个就是普通局部变量的生命周期会持续到程序结束
这句话对吗???

第一个问题: "a *= 2 + 3"的含义是"a = a * (2 + 3)"
这个里面有两个运算符,"*="和"+","+"的含义不用解释,"*="是赋值运算符,"a *= b"表示"a = a * b",类似的,"a += b"表示"a = a + b","a %= b"表示"a = a % b"
其次,"+"作为算术运算符,它的优先级是高于赋值运算符的,因此"a *= 2 + 3"会被编译器解释为"a = a * (2 + 3)"

第二个问题:在定义语句中赋初值的auto变量和static变量的初值是什么
变量分为四种:外部变量(全局变量)、静态变量(static修饰,可能是编译单元内全局的,也可能是函数内的)、自动变量(函数内的,通常省略auto)和寄存器变量(函数内的或者参数,基于效率考虑建议编译器放到寄存器中),在程序员没有显式初始化的情况下,外部变量和静态变量会初始化为0,自动变量和寄存器变量不会被初始化,即使用函数调研压栈时使用遗留下来的未知值
一个例子:
// test.cpp
int a;
static int b;

int func() {
int c;
static int d;
register int e;
int f = 1;
}

外部变量a、静态变量b和d都会被初始化为0,自动变量c、寄存器变量e都不会被初始化,至于自动变量f,它则是被程序员显式初始化为1

第三问题:普通局部变量的生命周期会持续到程序结束,错误的
普通局部变量,即自动变量,它存在于栈中,在函数被调用的时候开始存在,函数调用结束后消失,当然不会持续到程序结束
当然,如果是static的局部变量,那这句话又是对的,因为static变量(无论是编译