一.变量的生命周期和作用域
生命周期:变量的存在时间
作用域:变量的作用范围
变量的这两个属性决定了什么时候以及在什么地方可以使用此变量。
需要注意的是
1.循环内部定义的变量,生命周期为循环开始到结束。
int main{
for(int i=1;i<=10;i++)
{
printf("%d\n",i);
}
printf("%d",i);//这条语句会报错,使用了没有定义的变量。
return 0;
}
2.static的用法
static 饰局部变量
static修饰局部变量只改变变量的生命周期,而不改
变变量的作用域,它的作用是让局部变量出了作用域依然存在。
static 修饰全局变量
该变量可以在本文件中使用。
static 修饰函数
该函数可以在本文件中使用
3.变量只能被初始化一次,但是可以被多次赋值。
include<stdio.h>
include<windows.h>
void Show()
{static int i=0;//只执行一次
i++;
printf("%d\n",i);
}
int main()
{ int i=1;
for(;i<=10;i++)
{ Show();
Sleep(500);//用来暂隔程序
}
}
因为上述第三条
程序运行结果为 顺序打印1-10;
而不是 打印 十个1;
二.初始化和赋值的区别
初始化是系统在编译时进行的,而赋值是在程序运行时执行。
建议定义变量时要进行初始化。
三.逗号表达式
逗号表达式就是在圆括号中用逗号隔开的表达式。
例如(1,2,3,4,54)
而逗号表达式的值为括号内最右侧的值。
int a=(1,2,3,4,5,6);//结果a的值为6
四.C语言字符串
1.C语言是没有字符串类型的,要使用字符串,可以通过字符数组或者字符指针。
例如
char c[]="ABC";
char *b;
b=c;
2.字符串结束标志’/0’
char a[]={'A','B','C'};
char b[]="ABC";
printf("%d\n",strlen(a));//没有字符串结束标志'\0',输出值不确定
printf("%d\n",strlen(b));//求字符串长度为3
3.sizeof和strlen的区别
.sizeof是运算符,其参数可以是数组、指针、类型、对象、函数等。具体类型sizeof返回值unsigned int如下:
数组——编译时分配的数组空间大小;
指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
类型——该类型所占的空间大小;
对象——对象的实际占用空间大小;
函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。
strlen是函数,其库函数为<string.h>
参数必须是字符型指针, 它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。
五.typedef和#define
#define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。
例如:#define
#define LOM 500 //注意, 最后没有分号
typedef是定义了一种类型的新别名,不是简单的字符串替换,所以它比宏(#define)来得稳健。
例如:typedef int IN;
将整形变量int 定义新的名字IN。