一、变量:在运行过程中可以改变的。
(1)变量的定义:变量有字母,数字,下划线组成。 (注意:第一位不能为数字,如果第一位为字母,则应为小写字母。例如:int 4c=1; 4c这个变量的定义就是错误的格式)
1> 若以该形式 int a; 定义变量,则该变量的值为一个随机值,并且我们不能使用未初始化的局部变量。
2> 不能定义 char a="李“;因为在C语言中char类型占一个字节,汉字占两个字节。
3>如果在函数中定义了这样两个变量int a;int b; 它们在栈中是这样存储的。(栈的特点:先进后出)
(2)生命周期:程序/当前函数运行完,变量的内存就会自动回收。 (注意:这里的变量指的是在栈里存储的变量,如果在堆上存储的变量需要程序员手动回收)
(3)作用域:一对花括号之间。
(4)赋值符号:“=”该符号左边的称为左值,右边的称为右值。(注意:左值不能为数字。例如:int 3=a; 这是错误的定义格式)
二、常量:在运行过程中不可以改变的。
(1)常量的定义:cconst int a=10; (注意:在定义常量的同时进行初始化,常量是在编译的时候确定它的值的)
(2)const:修饰的变量叫做常变量
(3)#define:宏
1>宏的定义:例如: '#define PI 3.14159' (注意:定义后边 ;可加可不加,为了避免程序中的个别问题,尽量不要加!!)
2>宏的作用:修改所定义的常量的值较为快速方便。
三、预编译阶段的任务:宏替换、注释的替换(将注释全部替换为空格、头文件的引入等等。
四、运算符
(1)():函数、提升优先级、强制类型转换
(2) ~ :按位取反
例:11:0000 1011
~11:1111 0100
(3) >>:按位右移 (右移相当于除法)
例:11>>1:0000 0101 ==5 (高位补符号位的数字) 11/2
11>>2:0000 0010 ==2 11/2^2
(4) <<: 按位左移(左移相当于乘法)
例:11<<1:0001 0110 ==22 (低位补0) 112
11<<2:0010 1100 ==44 112^2
(5) ^:异或
例:
11:0000 1011
13:0000 1101
11^13:0000 0110
(6) &:与
例:11&13:0000 1001
(7) |:或
例: 11|13:0000 1111
(8)++:自增
运行结果为:10,12
原因:b=a++,这里的++是后增,即先将自己的值赋给b,再执行a+1.所以b=10;
执行完a+1后,a的值变为11,此时执行c=++a,这里的++是前增,即先执行a+1,执行完a+1后,a=12再赋值给c,则c等于12。
(9) - -:自减 (与++运算符类似)
(10)* * :乘法、定义指针、间接访问符
1> 例:int *a=&p (a是指向int型的指针变量)
2> int **m=&a; (m是一个二级指针,它的值为指针a的地址)
(11)sizeof:长度运算符,代表变量的所占字节数。
int main()
{
int p=10;
int *a=&p;
printf("%d\n",sizeof(p));
printf("%d\n",sizeof(a));
return 0;
}
运行结果为:
4
4
表明p、a所占的字节数是4,其中所有的指针,不管什么类型全部为四个字节。
#include<stdio.h>
int main()
{
int p=10;
printf("%d\n",sizeof(++p));
printf("%d\n",p);
return 0;
}
运行结果:
4
10
说明sizeof运算符只在编译时确定类型,不进行运行。(此程序中没有执行++p,因此p的值仍然是10)
(11)/:除
#include<stdio.h>
int main()
{ int a=5;
int b=2;
float f1=5/2;
float f2=(float)5/2;
float f3=(float)(5/2)
float f4=5/(float)2;
printf("%f\n",f1);
printf("%f\n",f2);
printf("%f\n",f3);
printf("%f\n",f4);
return 0; }
运行结果:
2.000000
2.500000
2.000000
2.500000
(12)&&:逻辑与
通过以下代码来学习
#include<stdio.h>
int main()
{
int a=0;
int b=2;
int c=3;
if(a++&&b++&&c++)
{
printf("is true\n");
}
else
{
printf("is false\n");
}
printf("%d,%d,%d\n",a,b,c);
return 0;
}
运行结果:
is false
1,2,3
原因分析:第一个条件的值为0,假的则逻辑与后边的不再执行运算,只有有a进行了一次自加。
&&的执行过程:如果第一个条件为真,再判断第二个条件,依此类推,只要遇见值为假的条件,就不再进行后边条件的判断。
(13)复合运算符 (运算符之间不能有空格)
+= 加后赋值运算符 如s+=1表示s=s+1
-= 减后赋值运算符 如s-=1表示s=s-1
*= 乘后赋值运算符
/ = 除后赋值运算符
% = 取模后赋值运算符
< <= 左移后赋值运算符