1.程序结构
#include <stdio.h>
int main()//主函数,程序执行入口
{
printf("Hello, World! \n");//打印,需要头文件<stdio.h>
return 0;//终止 main() 函数,并返回值 0
}
2.基本数据类型
类型 | 储存大小 /字节 |
---|---|
int | 2或4 |
char | 1 |
short | 2 |
long | 4或8 |
float | 4 |
double | 8 |
以上是常见的数据类型,另外还有指针在32位系统占4字节,64位系统占8字节。一个字节占8个bit位,在不同系统和不同的编译器下,储存大小可能不同,可以用sizeof 输出对应类型大小。
#include <stdio.h>
int main() {
printf("%llu",sizeof(int));
return 0;
}
当数据类型前面加上unsigned表示无符号数,可以理解为加上0的正数。例如char的取值范围一般是-128-127;而unsigned char的取值范围是0-255。
转换说明符:
3.变量和常量
变量
直接上荔枝!
#include <stdio.h>
int b=2;//全局变量
int main() {
int a = 1;//定义一个变量a并初始化。(局部变量)
printf("%d", a);
return 0;
}
全局变量的作用域是整个程序,而局部变量的作用域是函数体内,用完即毁。
常量
在 C 中,有两种简单的定义常量的方式:
使用 #define 预处理器。
使用 const 关键字。(我认为加上const本质上还是变量,因为不能用于定义数组)。
#include <stdio.h>
#define MAX 20
int main() {
const int a = 1;
//int arr[i];这样定义会报错。
int arr2[MAX];//而这样就可以
printf("%d,%d",MAX, a);
return 0;
}
4.储存类
auto 存储类:
auto 存储类是所有局部变量默认的存储类。
定义在函数中的变量默认为 auto 存储类,这意味着它们在函数开始时被创建,在函数结束时被销毁。
register 存储类
register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个字),且不能对它应用一元的 ‘&’ 运算符(因为它没有内存位置)。
register 存储类定义存储在寄存器,所以变量的访问速度更快,但是它不能直接取地址,因为它不是存储在 RAM 中的。在需要频繁访问的变量上使用 register 存储类可以提高程序的运行速度。
static 存储类
static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。
static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
全局声明的一个 static 变量或方法可以被任何函数或方法调用,只要这些方法出现在跟 static 变量或方法同一个文件中。
静态变量在程序中只被初始化一次,即使函数被调用多次,该变量的值也不会重置。
extern 存储类
extern 存储类用于定义在其他文件中声明的全局变量或函数。当使用 extern 关键字时,不会为变量分配任何存储空间,而只是指示编译器该变量在其他文件中定义。
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 extern 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。
当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。
5.运算符
算数运算符:
A=10;B=20
难理解的也就是++,- -。a++就是a=a+1;但是还有一种用法++a,这和a++是不同的,++a是先加一再进行其他运算,而a++是先运算再进行加一。
#include <stdio.h>
#define MAX 20
int main() {
int a = 2;
int i = 2;
int b = 0;
int c = 0;
b = a++;//b=2
c = ++i;//c=3
printf("%d, %d",b, c);
return 0;
}
关系运算符
逻辑运算符
赋值运算符
运算符优先级