L1:变量
- char =1Byte
- short =2Byte
- int =4Byte
L2:auto static register
- auto 局部变量的默认属性
存储于程序的栈中 - static 修饰的局部变量存储在程序静态区(全局区),变量不在栈上面,只会被初始一次。
static修饰的全局变量作用域只是声明的文件中,不能被别的文件所调用。
static修饰的函数作用域只是声明的文件中,不能被别的文件调用 - register 关键字指明将变量存储于寄存器中
register只是请求寄存器变量,但不一定请求成功
register变量必须是CPU寄存器可以接受的值
不能用&运算符获取register变量的地址
L3:if switch do while for
if
- else 匹配前面最近的if语句
- c语言没有标准的bool值类型 ,if使用bool时 直接放入表达式,不要进行比较 if(b)–>ok if(b==1) –>有可能出错
- 普通变量和0值进行比较时,0值应该出现在符号左边
if(0 == i) …. - float 变量不能直接进行0值比较,需要定义精度
#define E 0.00000001
float f =5.0;
if((5-E<=f)&&(f<=5+E)) //比较f是否==5
{
//statement 1;
}
else
{
//statement 2;
}
switch
- case语句中值只能是整型或字符型
- 不适合范围判断
循环(while for)
- break表示终止循环的执行,跳出块(switch 循环)的执行
- continue表示终止本次循环体,进入下次循环执行
- switch 中能否使用continue –》不能,switch中无循环
- do break配合使用 ,确保函数中只有一个分配资源的地方 和一个释放资源的地方 ,利用do while(0) 确保执行,利用break跳出不符合的情况,跳出后统一释放,保证不会出现内存泄露
int func(int n)
{
int i = 0;
int ret = 0;
int* p = (int*)malloc(sizeof(int) * n);
do
{
if( NULL == p ) break;
if( n < 0 ) break;
for(i=0; i<n; i++)
{
p[i] = i;
printf("%d\n", p[i]);
}
ret = 1;
}while(0);
free(p);
return
L4:void extern sizeof
- goto 禁用
- void 无
void * 指针作为左值用于“接收”任意类型的指针
void * 指针作为右值赋值给其他指针时需要强制类型转换 - extern
用于声明外部定义的变量和函数
用于告诉编译器用C方式编译
extern "C"
{
int f(int a,int b)
{
return a+b;
}
}
- sizeof 是编译器的内置指示符 ,不是函数
printf(“%d”,sizeof a);
printf("%d",sizeof (a));
L5:const 和volatile
const
1.const 修饰的变量是只读的,不可作为左值,但是可以通过指针修改。不是常量 ,是常量
2.const 修饰指针
const int* p ; //p可变,p指向的内容不可变
int const *p ; //p可变,p指向的内容不可变
int* const p ; //p不可变,p指向的内容可变
const int* const p ; //p和p指向的内容不可变
口诀: 左数右指
当const 出现在*左边时指针指向的数据为常量
当const 出现在*后右边时指针本身为常量
const修饰函数参数表示在函数体内不希望改变参数的值
const修饰函数返回值表示返回值不可改变,多用于返回指针的情形
volatile
- 用于告诉编译器必须每次去内存中去变量值
- 主要修饰可能被多个线程访问的变量
- 可以修饰可能被未知因数改变的变量