算术操作符
+ - * / %
int main()
{
(除号)两端的操作数如果都是整数,执行的是整数除法,至少有以一个操作数是浮点数执行的才是浮点数的除法
int a = 7 / 2;
printf("%dn", a);结果无小数位
float f = 7 / 2;
printf("%fn", f);//
float f = 7.0 / 2.0;结果有小数位
printf("%fn", f);
//7 / 2.0;
return 0;
}
/int main()
{
//% 操作符,关注的是除法后的余数
//% 操作符 的两个操作数必须是整数
int a = 7 % 2;//商3,余1 //7除以2等于3.5,0.5四舍五入为1
printf("%dn", a);
return 0;
}
新式写法
/int main()
{
int a = 10;//创建变量,并初始化
a = 20;//赋值
a = a + 5;
a += 5;
a = a * 2;
a *= 2;
return 0;
C语言是如何表示真假的呢?
0表示假,非0表示真
-1也表示真
int main()
{
int a = 10;
int b = 0;
if (a)
printf("hehen");
if (!b)//感叹号“!”可以反操作 由假变真
printf("hahan");
return 0;
int main()
{
int a = -10;
printf("%dn", +a);//正负为负 结果输出为-10
//printf("%dn", -a);//负负为正 结果为10
int a = 10;
char c = 'w';
int arr[10] = {0};
sizeof是一个操作符,不是函数
printf("%dn", sizeof a); //“a”可以加括号也可以不加。
printf("%dn", sizeof(int)); //“int”必须加括号。
printf("%dn", sizeof(c));
printf("%dn", sizeof(char));
printf("%dn", sizeof(arr));//40
int sz = sizeof(arr) / sizeof(arr[0]);//10
printf("%dn", sz);
return 0;
strlen 是库函数,只能针对字符串。求字符串的长度。计算的字符串中 之前的字符个数
sizeof是操作符,是计算所占内存空间的大小
/int main()
//{
int a = 10;
int b = ++a;//前置++,先++1,后使用
a=a+1,b=a;
printf("a=%d b=%dn", a, b);//11 11
int a = 10;
int b = a++;//后置++,先使用,再++1
b=a, a=a+1
printf("a=%d b=%dn", a, b);//11 10
int a = 10;
int b = --a;
a=a-1,b=a;
int b = a--;
b=a,a=a-1
printf("a=%d b=%dn", a, b);
int a = 10;
printf("%dn", a--);//先使用,在--1
printf("%dn", a);//9
return 0;
}
int main()
{
int a="3.14;//double"
正确操作是:在3.14前面加一个(int)
int a=(int)3.14;
return 0;
}
!= “用于测试不相等”
==“用于测试”相等“
#include逻辑操作符int main() { int a = 3; int b = 3; if (a != b) printf("hehen"); if (a == b) printf("hahan"); = 赋值 char arr1[] = "abcdef"; char arr2[] = "abcdef"; 两个字符串是不能使用==来判断相等的,使用strcmp if (strcmp(arr1, arr2) == 0) { printf("==n"); } else { printf("!=n"); } return 0; }
&&逻辑与
l l逻辑或
//关注的是真假!
逻辑与-并且
逻辑或-或者
两个真 则为真 打印结果为一
一真一假 则为假 打印结果0
两个为假 则为假 打印结果0
int main()
{
&& - 逻辑与 - 并且
|| - 逻辑或 - 或者
int a = 0;
int b = 0;
//int c = a && b;
int c = a || b;
printf("%dn", c);
if (a || b)
{
printf("hehen");
}
return 0;
}
条件操作符(三目操作符)
int main()
//{
int a = 4;
int b = 0;
if (a > 5)
b = 3;
else
b = -3;
(a > 5) “?”(等于) (b = 3) “:”(否之)(b = -3);
b = (a > 5 ? 3 : -3);
printf("%dn", b);
return 0;
}
逗号表达式
exp1, exp2, exp3, …expN
int main()
{
int a = 3;
int b = 5;
int c = 0;
int d = (a += 2, b=b-c+a, c=a+b);
a=5 b=10 c=5+10
逗号表达式的特点:
从左向右依次计算,整个表达式的结果是最后一个表达式的结果
printf("%dn", d);
printf("%d %d %dn", a, b, c);
return 0;
}
下标引用、函数调用和结构成员
[] () . ->
下标引用符【】
int main()
{
int arr[10] = {0};//0~9
arr[4] = 5;//数组小标“4”对应着5
printf("%dn", 4[arr]);
arr 4是[]的两个操作数
2+3=5
3+2=5
2和3是+的操作数
下标引用操作符
return 0;
}
函数调用符()
//函数调用操作符
int Add(int x, int y)
{
return x + y;
}
int main()
{
int c = Add(2, 3);//()是函数调用操作符,操作数是:Add,2,3
printf("c=%dn", c);
return 0;
//输出结果为:c=5
}
常见关键字
registerauto break case char const continue default do double else enum
extern float for goto if int long register return short signed
sizeof static struct switch typedef union unsigned void volatile while
int main()
{
//建议把10放在寄存器中 仅仅是建议
register int a = 10;
return 0;
}
typedef -类型重定义
//typedef unsigned int uint;
//(typedef)可以将(unsigned)转换为**uint**
int main()
{
unsigned int num;//转换前
uint num2; //转换后
return 0;
static关键字
1.修饰局部变量
2.修饰全局变量
3.修饰函数
1.修饰局部变量
普通的局部变量是放在内存的栈区上的,进入局部范围,变量创建,出了局部范围变量销毁,
第一步:正常运行
第二步:开始循环 因为i(0)小于10
第三步:后置加一
第四步:运行到上面的:int a=3
后置加一 结果为四
第五步:生命周期结束 销毁
第六步的前五步同上第六步继续循环。
2
当static修饰局部变量的时候,局部变量是在静态区开辟空间的,这时的局部变量,出了作用域变量不销毁,下次进去作用域,使用的是上一次遗留的数据。(改变了存储位置,由栈区–>静态区,使得变量的生命周期发生了变化。)
修饰全局变量
全局变量是具有外部链接属性的,如果全面变量被static修饰,外部链接属性就变成了内部链接属性。
其他源文件就没法在通过链接找到这个符号
static修饰后的局部变量只能在自己所在的.c文件内部使用
3.修饰函数
函数是具有外部链接属性的,其他源文件想使用函数,正需要正确的声明就可以。
但是函数被static修饰,外部链接属性就变成了内部链接属性,这个时候函数只能在自己所在的.c
文件内部使用,不能在外部使用。
外部链接属性-
内部链接属性-static
无链接属性-局部变量



