作用域和生存期
作用域(可见性)指标识符能够被使用的范围;只有在作用域内标识符才可以被使用。
此阶段针对编译和链接过程
(1)函数中定义的标识符,包括形参和函数体中定义的变量,作用域都在函数体内,也称作函数域。
(2)文件作用域也称全局作用域。定义在所有函数之外的标识符,具有文件作用域,作用域为从定义处到整个源文件结束。文件中定义的全局变量和函数都具有文件作用域。
生存期也叫生命期。此阶段针对程序的执行过程
生命期指的是标识符从程序开始运行时被创建,具有存储空间,到程序运行结束时消亡,释放存储空间的时间段。
局部变量的生存期:函数被调用,分配存储空间,到函数执行结束,存储空间释放。(存储在stack栈区)
全局变量的生存期:从程序执行开始,到执行后结束,(存储在data数据区)
动态生命期标识符由特定函数调用或运算来创建和释放,如调用malloc()为变量分配存储空间,变量的生命期开始,而调用free()释放空间或程序结束时,变量的生命期结束。(存储在堆区.heap)
操作数程序操纵的数据实体,该数据可以是数值,逻辑值或其他类型。可是常量或变量。
运算符±*/ 可以对数据进行相应操作的符号。
单目运算符,双目运算符,多元运算符
单:a++
双目:c=a+b;
多元:(?:)
左值和右值赋值号左边即左值,右边即右值。
左值(lvalue)可寻址
右值(rvalue)可读
取余和取模的区别当除数和被除数一样时二者并无区别,但是当二者符号不一样时,取余的值符号和被除数一致,而取模的值符号和除数一致。
前置++和后置++的区别当二者不被赋值时,并无区别,但在for语句中建议使用++i的写法。
当二者被赋值以后,b=i++是先将i值给到b再+1,b=++i是先加1再将i给到b。
指针`
int a = 10;
printf("1==>0x%08x\n", &a);``
printf("2==>0x%08x\n", &a);
printf("3==>%p\n", &a);
printf("4==>%#p\n", &a);
return 0;`
取地址的符号%x,%p,建议用%p。
int p=10,b=0;
int *p;
p=&b; // 等价于int *p=&b;
*p=*&b=b=9;
只要是指针,那么它要么是4字节(32位下)要么是8字节(64位下)