C语言
# hello word
// std 标准(standard)
// i 输入
// o 输出
#include <stdio.h>
//main 函数,约定程序入口,有且只能有一个
int main() {
//printf 是一个库函数,不带换行需要自己使用换行符
printf("Hello, World!\n");
//如果正常返回0,异常则非0
return 0;
}
# 输入/输出
# 输出
#include <stdio.h> // 包含标准输入输出库
int main() {
// 打印 整形
printf("%d \n", 1);
// 打印 字符
printf("%c \n", 'h');
// 打印 字符串(注意字符串要用双引号)
printf("%s \n", "hello world");
// 打印 float
printf("%f \n", 1.1f);
// 打印 double(注意格式说明符应为 %lf)
printf("%lf \n", 1.1); // 不需要加 lf 后缀,1.1 默认为 double 类型
return 0;
}
# 输入
需要在控制台输入
#include <stdio.h>
int a = 21;
int main(){
//在函数内
int a = 19;
printf("在控制台输入一个数:\n");
// &a 表示 变量a的地址
scanf("%d",&a);
//如果输入类型错误,将会打印出原来的值
printf("%d \n",a);
return 0;
}
# 数据类型
类型 | 描述 | 大小 | 空间 |
---|---|---|---|
char | 字符型 | 1 | 8 |
shore | 短整型 | 2 | 16 |
int | 整型 | 2 | 16 |
long | 长整型 , 4 (32 位)或 8 (64 位) | 4 | 32 (32 位)或 64 (64 位) |
long long | 长长整型 | 8 | 64 |
float | 单精度浮点型 | 4 | 32 |
double | 双精度浮点型 | 8 | 64 |
# 关键字
关键字 | 用途 |
---|---|
auto | 声明自动变量 |
extern | 声明变量或函数是在其它文件或本文件的其他位置定义 |
enum | 声明枚举类型 |
const | 声明只读变量 |
static | 声明静态变量 |
volatile | 说明变量在程序执行中可被隐含地改变 |
void | 声明函数无返回值或无参数,声明无类型指针 |
goto | 无条件跳转语句 |
struct | 声明结构体类型 |
union | 声明共用体类型 |
register | 声明寄存器变量 |
sizeof | 计算数据类型或变量长度(即所占字节数) |
typedef | 用以给数据类型取别名 |
signed | 声明有符号类型变量或函数 |
unsigned | 声明无符号类型变量或函数 |
char | 声明字符型变量或函数返回值类型 |
short | 声明短整型变量或函数 |
int | 声明整型变量或函数 |
long | 声明长整型变量或函数返回值类型 |
double | 声明双精度浮点型变量或函数返回值类型 |
float | 声明浮点型变量或函数返回值类型 |
switch | 用于开关语句 |
case | 开关语句分支 |
default | 开关语句中的"其它"分支 |
if | 条件语句 |
else | 条件语句否定分支(与 if 连用) |
do | 循环语句的循环体 |
while | 循环语句的循环条件 |
for | 一种循环语句 |
continue | 结束当前循环,开始下一轮循环 |
break | 跳出当前循环 |
return | 子程序返回语句(可以带参数,也可不带参数) |
# 表达式
用于计算变量、数据类型或表达式所占用的内存大小,单位是 字节(byte)
编译时计算,不会影响运行时的性能
# sizeof
#include <stdio.h>
int main() {
char str[50] = "hello";
printf("char =>%zu\n",sizeof(str));// 打印50
printf("%d \n",sizeof 1);
printf("char =>%zu\n",sizeof(char));
printf("short => %zu\n",sizeof(short));
printf("int => %zu\n",sizeof(int));
printf("long =>%zu\n",sizeof(long));
printf("long long =>%zu\n",sizeof(long long));
printf("float =>%zu\n",sizeof(float));
printf("double =>%zu\n",sizeof(double));
return 0;
}
# ,
#include <stdio.h>
int main() {
int a = 1;
int b = 2;
int c = 3;
printf("%d \n", (c=a+b,b=c+10,a=b-4));
return 0;
}
# ~
二进制取反
#include <stdio.h>
int main() {
printf("%d \n",~1); //输出结果 -2
printf("%d \n",~2); //输出结果 -3
printf("%d \n",~3); //输出结果 -4
printf("%d \n",~11); //输出结果 -12
printf("%d \n",~-11); //输出结果 10
printf("%d \n",~-4); //输出结果 3
return 0;
}
0001 = 1
1110 取反 -2
得到结果 ~1 = -2
为什么 1110 == -2?
负数以补码形式存储,在原码的基础上+1,所以-1得到原码
1110
- 0001
-----------
1101
取反 0010 = 2
所以 1110 为 -2的补码
1110 = -2
0001 取反 //有符号值:0 为正数1
得到结果 ~-2 = 1
# 变量
# 全局变量
作用域,整个工程,生命周期为整个程序的生命周期
#include <stdio.h>
//在函数外
int a = 20;
int main(){
printf("%d \n",a); //输出结果 20
return 0;
}
# 局部变量
作用域,变量所在的局部区域,生命周期为:进入作用域开始,离开作用域结束
#include <stdio.h>
int main(){
//在函数内
int a = 20;
printf("%d \n",a); //输出结果 20
return 0;
}
注意
全局变了和局部变量相同是局部优先
#include <stdio.h>
int a = 21;
int main(){
//在函数内
int a = 19;
printf("%d \n",a); //输出结果 19
return 0;
}
# 常量
笔记
定义:
常变量是一个 不可修改的变量,在定义时必须初始化,且之后不能更改其值。
常变量本质上是一个变量,但它的值在运行时是固定的。
特点:
不可变性:常量值在定义后不能被修改。
直接替换:在编译时,常量的值通常会被直接替换到代码中(某些编程语言中)。
无存储空间:常量通常在编译时被处理,可能不会占用运行时的内存。
#include <stdio.h>
int main(){
printf("%d \n",1); //1 就是常量
//用常量声明
char arr [4] = {"123"};
printf("字符输出 : %s\n", arr);
return 0;
}
# const
定义:
常变量是一个 不可修改的变量,在定义时必须初始化,且之后不能更改其值。
常变量本质上是一个变量,但它的值在运行时是固定的。
特点:
- 不可变性:常变量的值在定义后不能被修改。
- 存储空间:常变量在内存中有存储空间。
- 运行时定义:常变量的值在运行时生效(与常量不同)
#include <stdio.h>
int main(){
//被 const 本质是变量,但是不能直接修改
const int b = 1;
//用常量声明
//char arr [b] = {2};//代码异常
printf("输出 =>%d ",b);
return 0;
}
# define 标识符常量
#include <stdio.h>
#define MAX 100
int main(){
printf("MAX %d \n",MAX);
return 0;
}
注意
注意最后不要带;
# 枚举常量
注意
枚举值本质上是整数,默认从 0 开始递增。
#include <stdio.h>
enum Color {
RED,
GREEN,
BLUE,
};
int main(){
printf("color %d \n",RED);
printf("color %d \n",GREEN);
printf("color %d \n",BLUE);
return 0;
}
打印出
color 0
color 1
color 2
# 字符串
#include <stdio.h>
#include <string.h>
int main(){
char str [] = "12345";
char str2 [] = {'1','2','3','4','5','\0'};
//字符串本质是个数组 ,末尾用\0结束,\0不计入长度
printf("打印字符串1:%s => %d \n",str,strlen(str));
printf("打印字符串2:%s => %d \n",str2,strlen(str2));
//用常量声明
char arr [4] = {"123"};
printf("字符输出 : %s\n", arr);
char arr2 [3] = {"123"};
//因为123 长度是3 ,而arr2 最大长度也是3 ,不能正常存储\0字符,所以一下输出会错乱读取内存中的字符
printf("字符输出 : %s\n", arr2);
return 0;
}
# 数组
整数数组:必须使用 花括号 {} 进行初始化,不能使用方括号 []
数组下班从0开始
#include <stdio.h>
int main(){
//声明
int arr [4] = {1,2,3,4};
//遍历
for (int i = 0; i < 4; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
# 选择结构 IF
#include <stdio.h>
int main(){
printf("1: C\n");
printf("2: Python\n");
printf("3: JAVA\n");
printf("请选择: \n");
int cmd =0;
scanf("%d",&cmd);
if(cmd == 1){
printf("开始学习C");
}else if (cmd == 2)
{
printf("开始学习Python");
}else{
printf("开始学习Java");
}
return 0;
}
# 循环结构 While
#include <stdio.h>
int main(){
int line = 0;
while (line < 10){
printf("开始学习 %d \n",line);
line++;
}
printf("学习结束\n");
return 0;
}
# 函数
# 写法1
#include <stdio.h>
int data() {
printf("Hello, World!\n");
return 0;
}
int main() {
//printf 是一个库函数,不带换行需要自己使用换行符
printf("Hello, World!\n");
//如果正常返回0,异常则非0
return data();
}
# 写法2
笔记
如果函数调用在实现之前,需要在调用前申明
#include <stdio.h>
//调用前申明
int data();
int main() {
//printf 是一个库函数,不带换行需要自己使用换行符
printf("Hello, World!\n");
//如果正常返回0,异常则非0
return data();
}
int data() {
printf("Hello, World!\n");
return 0;
}
# typedef
类型定义,类似与别名
#include <stdio.h>
#include <string.h>
typedef unsigned char str;
int main() {
str a [] = "Hello, World!";
printf("|%s| 的长度是: %d\n", a, strlen(a));
return 0;
}
# 库
# string.h
# strlen
#include <stdio.h>
#include <string.h>
int main() {
char str[50] = "hello";
printf("|%s| 的长度是 |%d|\n", str, strlen(str));
return 0;
}
上次更新: 2025/03/07, 10:47:17