【参考课程:B站 BV1cq4y1U7sg BV1Vm4y1r7jY】
目录
1.main主函数
项目从main函数第一行开始运行。
每个C语言程序有且仅有一个main函数。
int main() //定义主函数
{ //{}内为函数体
return 0; //执行完函数后返回函数值0
}
每个语句后都有 ; 表示语句结束。
2.基本数据类型
包括整形类型与浮点类型
int main()
{
//定义空间储存不同的数据类型
//整形类型
int a=1; //基本整形
short int b=1; //短整形,可省略int
long int c=1; //长整形,可省略int
long long int d=1; //双长整形,可省略int
char e=1; //字符型
//浮点类型
float f = 1.1; //单精度浮点型
double g = 1.2; //双精度浮点型
return 0;
}
不同类型所占空间大小不同。
int main()
{
printf("%lld\n", sizeof(int)); //4bytes
printf("%lld\n", sizeof(short)); //2bytes
printf("%lld\n", sizeof(long)); //4bytes.规定sizeof(long)>=sizeof(int)
printf("%lld\n", sizeof(long long)); //8bytes
printf("%lld\n", sizeof(char)); //1bytes
printf("%lld\n", sizeof(float)); //4bytes
printf("%lld\n", sizeof(double)); //8bytes
return 0;
}
占位符:%d-整型 %f-浮点型 %lf-双精度浮点型
占位符%d在格式化输入输出中代表int(4bytes),%ld代表long int(>=4bytes), %lld代表long long int (8bytes);
sizeof返回的是一个64位 (8bytes)的无符号整型,所以占位符应该是%lld。
*sizeof不是函数,而是单目运算符。其运算符的含义是:求出对象在计算机内存中所占用的字节数。
*1byte字节=8bit比特位,1kb=1024byte,1mb=1024kb,1gb=1024mb,1tb=1024gb......
3.变量与常量
变量:可变的量
常量:不可变的量
3.1变量
#include<stdio.h>
int main()
{
//变量类型 变量名=赋值
int numb = 0; //创建变量,建议在此处即将变量赋值,可暂赋为0
numb = numb + 1; //变量可变
printf("%d\n", numb); //会输出numb最新值1
return 0;
}
变量分类
局部变量:在{}内部定义的变量
全局变量:在{}外部定义的变量
当局部变量与全局变量名字冲突时,局部优先
变量求和
#define _CRT_SECURE_NO_WARNINGS 1 //解决scanf函数在VS中的报错问题
#include<stdio.h>
int main()
{
//变量类型 变量名=赋值
int a = 0;
int b = 0;
scanf("%d %d", &a, &b); //输入函数scanf
int sum = a + b;
printf("%d", sum);
return 0;
}
变量的作用域和生命周期
作用域scope:限定代码中名字的可用性的范围。 //代码在哪里可用,哪里就是它的作用域。
局部变量作用域:局部变量所在的局部范围/所在的{}内
int 全局 = 0;
printf("q1:%d\n", 全局); //q1报错,执行型代码必须放在{}内
int main()
{
printf("j1:%d\n",局部a); //j1正常
int 局部a = 1;
printf("q2:%d\n", 全局); //q2正常
printf("j2:%d\n", 局部a); //j2正常
{
int 局部b = 2;
printf("q3:%d\n", 全局); //q3正常
printf("j3:%d\n", 局部a);//j3正常
printf("j4:%d\n", 局部b);//j4正常
}
printf("j5:%d\n", 局部b); //j5报错,超出‘局部b’作用域
printf("q4:%d\n", 全局); //q4正常
return 0;
}
全局变量作用域:整个工程。同一工程下跨文件使用变量需要在新文件中声明变量。
//在工程A下的文件1中定义变量a:
int a=2023
//需要在工程A下的文件2中使用a
//则在文件2中声明变量a
extern int a;
//声明后a在文件2也可用
int main()
{
printf("%d",a);
return 0;
}
变量的生命周期:变量从创建到销毁之间的时间段。
局部变量的生命周期:进入局部范围生命开始→出局部范围生命结束。
全局变量的生命周期=main函数的生命周期=一个程序的生命周期
3.2常量
常量的类型
#include<stdio.h>
int main()
{
//1.字面常量
3.14;
10;
'a'; //单个字符用''引
"abcdef"; //字符串用""引
//2.const修饰的常变量
const int num = 10; //const修饰后num为常变量,不能再改变赋值
//常变量:具常属性(不能被改变的属性)的变量,本质还是变量。
//3.#define定义的标识符常量
#define MAX 2023
//4.枚举常量-可以一一列举的常量
enum SEX //SEX为创建的枚举类型
{
//在{}内枚举变量SEX的未来可能取值
//{}内列出的为枚举常量
MALE, //printf("%d",MALE)输出结果默认为0//MALE=3,若赋初值为3
FEMALE, //~为0+1=1//~则为3+1
SECREAT //~为1+1=2//~3+2
};
//在枚举类型SEX下创建枚举变量s
enum SEX s = MALE;
//变量s仅能在{}内列出的枚举常量中取值
return 0;
}
字符串
字符串占位符 %s
#include<string.h> //使用函数strlen()需要引用该头文件
#include<stdio.h>
int main()
{
//【字符串】--用""括起的一串字符
//字符数组--储存字符串
char arr1[] = "abc";
//字符串的结尾都有\0--为字符串的结束标志,可隐藏
//单个字符无隐含结束标志,需手动添加
char arr2[] = { 'a','b','c'};
char arr3[] = {'a','b','c','\0'};
printf("%s\n", arr1); //输出 abc
printf("%s\n", arr2); //输出 abc+乱码
printf("%s\n", arr3); //输出 abc
//函数strlen()求字符串长度//string length
int len = strlen("abc");
printf("%d\n", len); //输出 3
//字符串结束标志'\0'不计入字符串长度
printf("%d\n", strlen(arr1)); //输出 3
printf("%d\n", strlen(arr2)); //输出 随机数
printf("%d\n", strlen(arr3)); //输出 3
return 0;
}
转义字符
字符有其他含义,无法被直接打印出来
在字符前加 \ 以打印出其原义
\ddd | ddd表示1~3个八进制的数字。如:\130X |
\xdd | dd表示2个十六进制数字。如:\x30 0 |
*进制转换:
n进制数字 dcba 转换为10进制=d*n^3+c*n^2+b*n^1+a*n^0
例题: 输出什么?答案:输出 14
解析:\328由于8>=8超出八进制位所以应该输出两个字符:\32 8
即:c : \t e s t \32 8 \t e s t . c
注释
//C++注释风格
/*C语言注释风格*/ //不建议用--不支持嵌套注释
*注释--除用于解释代码外还可用于屏蔽代码(注释内容不会运行)