1、变量:在运行过程当中可以改变
= : 左边:左值 右边:右值
#include<stdio.h>
int main()
{
int a=10;//a为局部变量,放在栈上
}
作用域:花括号之间
生命周期:当前函数运行完 变量的内存就会系统自动回收
栈:先进后出
int a=10;
int b=20;
int d;//error默认值为随机值
printf("%d\n",d);//报错 .不能够使用,未初始化的局部变量
局部变量必须为 数字,字母,下划线。
局部变量一定要初始化。
调试:
a、打断点
b、调试:逐过程,逐语句
char ch='高';
printf("%c\n",ch);//输出为?
为什么?
因为 char 本质上就是 int 类型,运算时会按照 int 类型进行计算,而程序中无法进行运算,所以未知。
2.常量:常量:在运行过程当中不可以改变
const:修饰的变量==》常变量 关键字
const int a=10;//定义一个常量,编译的时候确定它的值
const int b;
b=20;//错误,定义常变量的时候,一定要进行初始化
#define: 宏
预编译:宏替换,注释的替换(空格),头文件的引入。。。
#define SIZE 10
{
int high=SIZE;
printf("%d\n",high);//输出为10
}
3、运算符
():函数,提升优先级,强制转换类型
[]:数组元素下标(从0开始)
例:
int arr[5] = {1,2,3,4,5};
arr[0] = 2;
printf(”%d\n“,arr[5]);//0,1,2,3,4,5
->:指向符,引用结构体成员
!:逻辑非
int a=10;
printf(“%d\n”,!a);//输出0
printf(“%d\n”,!!a);//输出1
~:按位取反
11:0000 1011
~11:1111 0100
‘>>’:按位右移:相当于除法
11>>1:0 0000 101==>0000 0101==>5
11>>2:00 0000 10==>0000 0010==>2
<<:按位左移:相当于乘法
11<<1:000 1011 0==>0001 0110==>22
11<<2:00 1011 00==>0010 1100==>44
^:异或:相同为0,不同为1
11:0000 1011
13:0000 1101
11^13:0000 0110
与(取地址)
11&13:0000 1001
|:或
11|13:0000 1111
++:增1,–:减1
int a=10;
int b=a++;//b=10,后置++先运算后++
a++=11;
int c=10;
int d=++c;//d=11,前置++先++后运算
++c=11;
||或,&&与
int i=1;
int i2=0;
int i3=2;
if(i++||i1++||i2++)
{
printf("is true\n");
}
else
{
printf("is false\n");
}
printf("%d,%d,%d\n",i,i2,i3);//2,0,2
或关系中遇真则真,i=1,判断为真,i++,停止执行
int i=1;
int i2=0;
int i3=2;
if(i++&&i1++&&i2++)
{
printf("is true\n");
}
else
{
printf("is false\n");
}
printf("%d,%d,%d\n",i,i2,i3);//2,1,2
与关系中遇假则假,i=1,判断为真,i++,执行后一步,i2=0,判断为假,i2++,停止执行
-:减,求负
*:乘,指针
int a = 10;
int* p = &a;//*:代表指针
*p = 100;//*:间接访问符 ==> 解引用
printf("%d\n",a);//a=100
int **pp = &p;
**pp = 10000;
printf("%d\n",a);//a=1000
sizeof:求当前变量的字节数
int a = 10;
printf("%d\n",sizeof(a));//4
printf("%d\n",sizeof a );//4
printf("%d\n",sizeof (int) );//4
int *p = &a;
char *p2 = (char *)&a;
printf("%d\n",sizeof (p) );//4
printf("%d\n",sizeof (p2) );//4
//所有的指针,不管什么类型全部为4个字节
printf("%d\n",sizeof (++a) );//4 编译时期
printf("%d\n",a); //11
printf("%d\n",sizeof (Fun()));//4
int arr[5] = {1,2,3,4,5};
printf("%d\n",sizeof (arr[5]));//4
printf("%d\n",sizeof (3+4.5));//8,遇到小数点,自动转换成double类型
/:除,%:整数求余
float f1 = 5/2;//2.000000
float f2 = (float)5/2;//2.500000
float f3 = (float)(5/2);//2.000000
float f4 = 5/(float)2;//2.500000
printf("%d\n",10%3);//1
printf("%d\n",-10%3);//-1
printf("%d\n",-10%-3);//1
printf("%d\n",10%-3);//-1
+=,-=,*=,/=,%=
int a=10;
a+=10;//a=a+10,a=20
<,<=:小于,小于等于
==:等于,=:赋值
!=:不等于
?: 三目运算符
int Max(int a,int b)
{
return a > b ? a:b;//如果a>b,输出a,否则输出b
}