目录
1、数据类型
补充一个小知识点:
- H:HEX 十六进制
- D:DEC 十进制
- O:OCT 八进制
- B:BIN 二进制
计算机中的单位:
- bit 比特位(存放一个二进制的位0/1)
- byte字节 = 8bit
#include <stdio.h>
int main()
{
printf("%d\n", 100);//打印一个整数
printf("%c\n", 'a');//打印一个字符
printf("%s\n", "abc");//打印一个字符串
printf("%f\n", 3.14);//打印一个单精度浮点数
printf("%lf\n", 3.14);//打印一个双精度浮点数
printf("%d\n", sizeof(char));
return 0;
}
2、变量和常量
2.1 变量
一个关于extern的小知识点:
add.c
//全局变量
int g_val = 2024;
text.c
#include <stdio.h>
//需要声明外部符号
extern int g_val;
int main()
{
printf("%d\n", g_val);
return 0;
}
2.2 常量
C语言中的常量分为以下几种:
- 字面常量
- const修饰的常变量
- #define定义的标识符常量
- 枚举常量
#include <stdio.h>
#define MAX 1000
enum Sex
{
MALE = 3,//赋初值
FEMALE,
SECRET
};
int main()
{
//1.字面常量
10;
3.14;
'a';
"abcdef";
//2.const修饰的常变量
const int num = 10;//num是具有常属性的,不能改变,但本质上还是变量
/*创建数组
int arr[10] = { 0 };//10个元素
int n = 10;
int arr2[num] = { 0 };//num是变量,会报错,加上const也不可以
*/
//3.#define定义的标识符常量
//MAX = 2000;//报错
int m = MAX;
printf("m = %d\n", m);
//4.枚举常量(可以一一列举的常量)
enum Sex s = MALE;
//MALE = 3;//报错,MALE是常量
printf("%d\n", MALE);
printf("%d\n", FEMALE);
printf("%d\n", SECRET);
//注:枚举常量的默认是从0开始,依次向下递增1的
//打印结果 3 4 5
return 0;
}
3、转义字符
#include <stdio.h>
int main()
{
printf("%c\n", '\'');
printf("%s\n", "\"");
printf("%c\n", '\130');//八进制130等于十进制88,X的ASCII码值是88
printf("%c\n", '\x30');//十六进制30等于十进制48,0的ASCII码值是48
return 0;
}
运行结果:
'
"
X
0
一道笔试题 :
//程序输出什么?
#include <stdio.h>
int main()
{
printf("%d\n", strlen("c:\test\328\test.c"));
return 0;
}
//输出结果:14
//解释:\t是一个转义字符;\32是一个转义字符(八进制由0-7组成)
4、常见的关键字
auto 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
4.1 typedef
//将unsigned int重命名为u_int, 所以u_int也是一个类型名
typedef unsigned int u_int;
typedef struct Node
{
int data;
struct Node* next;
}Node;//将struct Node重命名为Node
int main()
{
unsigned int num1 = 0;
u_int num2 = 0;
return 0;
}
4.2 static
4.2.1 修饰局部变量
//代码1
#include <stdio.h>
void test()
{
int a = 1;//a是局部变量
a++;
printf("%d", a);
}//出来之后a就销毁了
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
//输出结果:2222222222
//代码2
#include <stdio.h>
void test()
{
//static修饰局部变量
static int a = 1;
a++;
printf("%d", a);
}//出来之后a没有销毁
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
//输出结果:234567891011
- static修饰局部变量的时候,本来一个局部变量是存放在栈区的,如果被static修饰就存储到静态区了
- static修饰局部变量改变了变量的存储类型(位置),使得这个变量的生命周期变长了,直到程序结束才结束
- 但是作用域不变,只能在函数内部调用
4.2.2 修饰全局变量
//代码1
add.c
int g_val = 2023;
test.c
//extern声明外部符号
extern int g_val;
int main()
{
printf("%d\n", g_val);
return 0;
}
//输出结果:2023
//代码2
add.c
static int g_val = 2018;
test.c
//extern声明外部符号
extern int g_val;
int main()
{
printf("%d\n", g_val);
return 0;
}
//错误
-
全局变量具有外部链接属性,所以在其他源文件内部依然可以使用
-
static修饰全局变量,改变了这个全局变量的链接属性,由外部链接属性变成了内部链接属性
-
这个静态变量只能在自己所在的源文件内部使用,不能在其他源文件内部使用了
4.2.3 修饰函数
static修饰函数和static修饰全局变量是一样的。
5、#define定义常量和宏
//#define是预处理指令
//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))
// 名字 参数 宏的实现体
int ADD(int x, int y)//int函数的返回类型 ADD函数名 xy函数参数
{
return x + y;
}//大括号里的是函数体
int main()
{
int sum = ADD(2, 3);
//替换成int sum = ((2)+(3))
//宏的展开是在预处理阶段进行的,即在编译之前,不占用额外的存储空间
printf("sum = %d\n", sum);
sum = 10*ADD(2, 3);
printf("sum = %d\n", sum);
return 0;
}
//输出结果:sum = 5 sum = 50