各位友友大家好,我是来自某中游211的控制科学与工程专业的研一学生,近期在学习c语言和c++,目标是建立起扎实的编程基础,能够独立开发一些小型项目,并逐步深入了解更高级的编程概念和技术。
我想通过在线的编程培训进行系统的学习,同时在csdn上分享一些自己近期总结的知识点盲区来不断提升自己,欢迎大家前来学习和指正。
C语言数据类型和变量注意事项:
1.字符型:[signed] char//有符号的 ; unsigned char//无符号的
2.布尔类型使用要包含头文件<stdbool.h> 可以定义为_Bool flag = true或者bool flag = true;
3.sizeof(类型)或者sizeof 表达式,单位是字节,其中sizeof后边的表达式不真实参与运算,由表达式的类型得出大小,
例如
{
short s = 2;
int b = 3;
printf("%zd\n", sizeof s);//2
printf("%zd\n", sizeof(s = b + 1));//2
printf("%d\n", s);//2,说明s的值未变
}
sizeof返回值类型可能是%u(无符号整型),%lu(无符号长整型),%llu(无符号长长整型);因此,将size_t作为sizeof的返回值,对应这三种返回值类型,用%zd表示。
C语言规定:sizeof(long)>=size(int)
4.int 等同于 signed int ,但是char不等同于signed char,可能是signed char 也可能受unsigned char.
5.全局变量为在大括号外面定义的变量,局部变量为在大括号里面定义的变量,并且局部变量只能在自己所在的局部范围内使用。如果全局变量和局部变量重名,优先使用局部变量。没有初始化的局部变量,里面放的是随机值。
6.局部变量放在内存的栈区,全局变量放在静态区
7.算术操作符是双目操作符,/ 用来完成除法,如果除号两端是整数,执行的是整数除法,结果也是整数,C语言里面的整数除法是整除,只会返回整数部分,丢弃小数部分。如果希望得到浮点数的结果,两个运算数至少有一个是浮点数。
8.% 求模运算,只能用于整数,返回两个整数相除的余数。求模结果的正负号与被除数的正负号保持一致,如11%-5=1,-11%-5=-1。
9.c=a=b+3//连续赋值,从右往左依此复制。
10.前置++:++a//先+1后使用 后置++:a++//先使用后+1
11.强制类型转换,(int)3.14 表示将3.14强制类型转换为int类型,只取整数部分
12.printf()不会自动在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行;如果printf()有n个占位符,对应有n+1个参数。如果参数个数少于对应的占位符, printf() 可能会输出内存中的任意值。
printf()可以限定占位符的最小宽度,%5d表示这个占位符的宽度至少为5位。如果不满5位, 对应的值的前面会添加空格,默认右对齐;%-5d表示左对齐,不满5位在后面添加空格。
例:
#include<stdio.h>
int main()
{
printf("%5d\n", 123);//输出" 123"
printf("%-5d\n", 123);//输出"123 "
return 0;
}
对于小数,这个限定符会限制所有数字的最小显示宽度,%12f表示输出的浮点数最少要占据12位。由于小数的默认显示精度是小数点后6位, 所以 123.45 输出结果的头部会添加2个空格。
int main()
{
printf("%12f\n", 123.45);//输出" 123.450000"
return 0;
}
printf("%*.*f", 6, 2, 0.5);//输出" 0.50" 等同于printf("%6.2f\n", 0.5)
%.[m]s
指定输出
的长度,其中
[m] 代表⼀个数字,表示所要输出的长度,
占位符
%.5s
表⽰只输出字符串“hello world”的前5个字符,即“hello”。
printf("%.5s\n", "hello world");
13.scanf()传入的是地址,不是值
标准输入一般是指键盘,标准输出一般是指屏幕
scanf("%d%d%f%f",&a,&b,&c,&d);
int main()
{
char ch[11];
scanf("%10s", ch); /*ch 是⼀个⻓度为11的字符数组,
scanf() 的占位符 % 10s 表⽰最多读取用户输⼊
的10个字符,后⾯的字符将被丢弃,这样就不会有数组溢出的⻛险了。*/
return 0;
}
int main()
{
int year = 0;
int month = 0;
int day = 0;
scanf("%d%*c%d%*c%d", &year, &month, &day);
return 0;
}