如你对其他C语言知识感兴趣,请考虑阅读我的专栏:
须知
本文仅作学习笔记使用,仅在CSDN网站发布,如果在其他网站发现,均为侵权行为,请举报。作者:小王在努力。
参考资料:小甲鱼-带你学c带你飞
C语言学习-Part 02
数据类型
1.类型分类
- 基本类型
–整数类型 int
–浮点数类型 float
–字符类型 char
–布尔类型 _Bool
–枚举类型 emnu - 指针类型
- 构造类型
–数组类型
–结构类型
–联合类型 - 空类型
2.基本类型
- 整数类型
–short int
–int
–long int
–long long int
–三者之间的关系为: short int <= int <= long int <= long long int - 浮点数类型 float
- 字符类型 char
- 布尔类型 _Bool
- 枚举类型 emnu
3.sizeof运算符
- sizeof(object); //sizeof(对象)
- sizeof(type_name); //sizeof(类型)
- sizeof object; // sizeof 对象
4.signed和unsigned 限定符
- 其中signed代表带符号,默认为signed
- unsigned代表不带符号,其中在格式化输出函数中输出无符号数为:%u
取值范围
1.比特位
- bit:CPU能读懂的最小单位
- Byte:内存机构中的最小寻址单位。 1Byte = 8 bit
2.基本数据类型的取值范围
字符和字符串
1.signed和unsigned
- C语言中char的默认类型是看用户的操作系统的,有的系统默认是signed有的系统默认为unsigned,注意区分int
2.字符串
- 声明形式:char 变量名[数量];
- 变量名[索引] = 字符;
- eg:
//声明字符串
char name[5];
//为字符串赋值
name[0] = 'D';
name[1] = 'a';
name[2] = 'n';
name[3] = 'D';
name[4] = 'a';
//定义字符串
char name[5] = {'F', 'i', 's', 'h', 'C'};
3.注意事项
- 字符串的赋值要考虑到‘\0’的位置,即,实际长度应该等于字符串长度-1,如按以下进行赋值操作则会出现问题:
char name[5] = "DanDa";
printf("我的网名是:%s", name);
- 为了方便可以采用不填写字符串的长度来避免此类型错误:
char name[] = "Dan_Dan";
printf("我的网名是:%s", name);
算术运算符
1.算数运算符表
2.表达式
- 表达式:使用运算符和括号讲操作数连接起来的式子,eg : a + ‘b’ + pow(a, b) * 3 / 4 +5
3.类型转换
- 在不同类型的数据在进行运算的时候,先将不同的数据类型转换为相同的数据类型(转换为所占内存较大的数据类型)
- 强制转换:(类型) 初始类型
关系运算符和逻辑运算符
1.关系运算符
- 常见的关系运算符: > < >= <= == != (优先级小于算数运算符,大于赋值运算符)
- c语言用 1 表示真,用0表示假
2.关系表达式
- 用关系运算符将两边的变量、数据或表达式连接起来
- 1 < 2 返回的逻辑值为 1
- ‘a’ + ‘b’ <= ‘c’ 返回的逻辑值为0
3.逻辑运算符
- 需要同时对两个及两个以上的关系表达式进行判断需要用到逻辑运算符
- C语言提供了三种逻辑运算符: !> && > ||(优先级比较)
4.逻辑表达式
- 用逻辑运算符将两边的变量、数据或表达式连接起来
- 3 > 1 && 1 < 2 返回的逻辑值为 1
- 3 + 1 || 2 == 0 返回的逻辑值为 1(3+1 = 4,4为非零,所以 真||未知,判断或后面的真假,2!=0所以后面为假,所以 真||假 = 真,所以返回的逻辑值为1)
- a = 3, b = 5则下列:
- !(a + b) 返回的逻辑值为 0
- !0 + 1 < 1 || !(3 + 4) 返回的逻辑值为 0
- ‘a’ - ‘b’ && ‘c’ 返回的逻辑值为 1
- 得到的结论:
– 1.算术运算符 > 关系运算符 > 逻辑运算符
– 2.在计算此类表达式返回的逻辑值时候,先用逻辑运算符将式子分为几部分,然后分别求各个部分的真假
5.短路求值
- c语言对逻辑与和逻辑或采取短路求值的方式
- 短路求值说白了就是如果第一部分就能够确定表达式返回的逻辑值,就不用计算接下来的关系表达式了。
- 例如:(1 || 596 * 2 - 1191 == 0),根据逻辑或的性质,在已知第一部分返回的逻辑值为1导致表达式返回的逻辑值已经确定为1了,所以就不用计算接下来的部分了
int a = 3, b = 5;
(a = 0) && (b = 4396);
printf("a = %d, b = %d\n", a, b);
(a = 1) || (b = 4396);
printf("a = %d, b = %d\n", a, b);
- 运行结果为: