一 基础类型
C没有字符串类型
类型 | 含义 |
---|---|
char | 字符数据类型 |
short | 短整型 |
int | 整型 |
long | 长整型 |
long long | 更长的整型 |
float | 单精度浮点型 |
double | 双精度浮点型 |
unsigned | 无符号整型(自然数) |
通过C代码来查看其数据类型的占用空间
#include <stdio.h>
int main()
{
printf("%zu\n",sizeof(char)); // 1 单位: 字节
printf("%zu\n",sizeof(short)); // 2
printf("%zu\n",sizeof(int)); // 4
printf("%zu\n",sizeof(long)); // 4
printf("%zu\n",sizeof(long long)); // 8
printf("%zu\n",sizeof(float)); // 4
printf("%zu\n",sizeof(double)); // 8
return 0;
}
其中单位之间的转化关系为:
bit | 比特位 ---------------- 1 字节 = 8 比特位 ----------小
byte | 字节 ----------------- 其余的进制为1024
kb
mb
gb
tb
pb --------------------------------------------------------------大
二 变量 常量
1 全局变量和局部变量
全局变量:顾名思义,就是在整个C文件中一直存在,有效的变量
局部变量:顾名思义,就是在所定义的区域范围内所存在,有效
(建议:不要将全局变量和局部变量的名字写成一样的)
# include <stdio.h>
int a=100; // a 为全局变量
int main()
{
int a=2; // a 为局部变量
printf("%d\n",a); // 输出 2 (全局变量与局部变量名字相同时,局部优先)
return 0;
}
全局变量在两个文件中使用
全局变量具有外部链接属性
extern修饰其全局变量
2 生命周期
全局变量:整个程序的生命周期
局部变量:进入作用域生命周期开始,出作用域生命周期结束
# include <stdio.h>
int main()
{
{int a=2; // a 的生命周期 开始
printf("%d\n",a);
} // a 的生命周期 结束
printf("a=%d\n",a);
return 0;
}
3 常量
常量的类型:
① 字面常量
② const 修饰的常变量
③ #define 定义的标识符常量
④ 枚举常量
字面常量:
# include <stdio.h>
int main()
{
30; // int 整型
3.14; // float 浮点型
'w'; // 字符
"asdas"; // 字符串
return 0;
}
const 修饰的常变量:
# include <stdio.h>
int main()
{
const int a = 2; // const 修饰 a
a = 10; // 尝试修改 a 的值
printf("a=%d\n",a);
return 0;
// 程序报错
}
原因:
在C语言中,const修饰的a,本质为变量,但是不能进行修改,有常量的属性
证明 const修饰的a,本质为变量:
# include <stdio.h>
int main()
{
const int a;
int arr[a]={0};
// arr[a]={0}; 报错:a不为常量
int arr1[10]={0};
// 这种形式为数组,其中10的位置上只能是常量
printf("arr1=%d\n",a);
return 0;
}
define 定义的标识符常量:
# include <stdio.h>
# define MAX 100 // 定义MAX为标识符常量
int main()
{
printf("%d\n",MAX); // 100
int a=MAX;
printf("a=%d\n",a); // a=100
MAX = 200;
// 程序报错
return 0;
}
枚举常量:
# include <stdio.h>
enum COLOR
{
RED,
GREEN,
BLUE
};
int main()
{
enum COLOR color=BLUE;
// red, green, blue 分别为 0 1 2,按照顺序从0开始往后累加
printf("%d\n",color); // 2
return 0;
}
三 字符串
# include <stdio.h>
int main()
{
char arr[] = "abcdef";
// abcdef
char arr2[] = {'a','b','c','d','e','f'};
// abcdef烫烫烫烫烫abcdef
printf("%s\n",arr);
printf("%s\n",arr2);
return 0;
}
为什么会出现这种情况呢?
# include <stdio.h>
int main()
{
char arr2[] = {'a','b','c','d','e','f','\0'}; // '\0'
printf("%s\n",arr2);
return 0; // 正常运行,输出 abcdef
}
从中我们可以发现,在字符串后面加一个 ‘\0’ 就可以正常运行了
这是由于,字符串输出以 ‘\0’ 为结束标志
当我们用 strlen() 来求字符串的长度时
# include <stdio.h>
# include <string.h>
int main()
{
char arr[] = "abc def";
char arr2[] = {'a','b','c','d','e','f'};
char arr3[] = {'a','b','c','d','e','f','\0'};
int len=strlen(arr);
int len1=strlen(arr2);
int len2=strlen(arr3)
printf("%d\n",len); // 7 (空格也算一个字符)
printf("%d\n",len1); // 12 (不一定为什么呢,没有'\0')
printf("%d\n",len2); // 6
return 0;
}
四 转义字符
转义字符 | 含义 |
---|---|
%d | 十进制有符号整数 |
%u | 十进制无符号整数 |
%c | 单个字符 |
%s | 字符串 |
%p | 指针的值 |
%e | 指数形式的浮点数 |
%x | 无符号 以十六进制表示的整数 |
%o | 无符号 以八进制表示的整数 |
%f | 打印float型的数据 |
%1f | 打印double型的数据 |
%zu | 打印sizeof的返回值 |
%04d | 打印的整数小于四位时,以0补齐 |
%6.9s | 长度在6~9 |
\n | 换行 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\r | 回车 |
\f | 进纸符 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | 表示1~3个八进制的数字,如:\130 X |
\xdd | 表示2个十六进制数字,如:\x30 0 |
其中 \ddd \xdd
把该数字换成十进制,并输出换算成的十进制数字所在ASCII表中表达的字符
五 注释
要利用好注释,对自己所敲代码进行注释哦,不然代码过多,自己都忘了什么意思啦
单行注释:
//这就是单行注释啦 想写啥就写啥,不耽误代码正常运行哦
多行注释:(缺陷:不能嵌套注释)
/*多行
注释
*/
新手小白,有何不妥,请您提出,还需努力!!!
👍+✏️+⭐️ 是对博主最大的鼓励与支持!!!