小白的学习记录
一、前置知识
注:博主是小白,所以记录的可能是一些无意中看到,但是不清楚的东西,所以大家择需了解。
JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。JSON 使用文本格式来表示结构化数据,通常用于在服务器和客户端之间传输数据,尤其是在 web 应用程序中。
JSON 的基本特性
-
简单易读:
- JSON 的语法结构简单,易于理解和使用。它的格式类似于 JavaScript 对象,因此对于熟悉 JavaScript 的开发者来说特别直观。
-
数据结构:
- JSON 支持两种数据结构:
- 对象:由键值对组成,使用花括号
{}
包围,键是字符串,值可以是字符串、数字、布尔值、数组、对象或null
。json
{ "name": "Alice", "age": 30, "isStudent": false }
- 数组:有序值的集合,使用方括号
[]
包围,可以包含多个值(对象或其他类型)。json
{ "students": [ {"name": "Alice", "age": 30}, {"name": "Bob", "age": 25} ] }
- 对象:由键值对组成,使用花括号
- JSON 支持两种数据结构:
-
数据类型:
- JSON 支持以下基本数据类型:
- 字符串(String):用双引号括起来的文本。
- 数字(Number):整数或浮点数。
- 布尔值(Boolean):
true
或false
。 - 数组(Array):值的有序集合。
- 对象(Object):键值对的无序集合。
- 空值(null):表示空值。
- JSON 支持以下基本数据类型:
-
语言无关性:
- JSON 是一种语言无关的数据格式,几乎所有编程语言都支持 JSON 的解析和生成,包括 JavaScript、Python、Java、C#、PHP 等。
JSON 的应用场景
-
Web API:
- JSON 是现代 Web 应用程序中常用的数据交换格式,尤其是在 RESTful API 中。客户端和服务器之间常使用 JSON 格式传输数据。
-
配置文件:
- JSON 常用于存储配置信息,比如应用程序的配置文件,因其易于阅读和编辑。
-
数据存储:
- 一些 NoSQL 数据库(如 MongoDB)使用 JSON(或类似格式)来表示和存储数据。
-
序列化:
- JSON 可以用于将数据结构序列化为字符串,以便于存储或通过网络传输。
JSON 示例
以下是一个完整的 JSON 示例,表示一个学生的信息:
json
{
"student": {
"name": "Alice",
"age": 20,
"isGraduate": false,
"courses": [
{"courseName": "Mathematics", "credits": 3},
{"courseName": "Physics", "credits": 4}
],
"address": {
"street": "123 Main St",
"city": "Anytown",
"zip": "12345"
}
}
}
JSON 的优缺点
优点:
- 轻量级:相比 XML 等其他格式,JSON 的数据结构更简洁,传输的数据量较小。
- 易读性:人类友好,易于理解和维护。
- 广泛支持:几乎所有编程语言都支持 JSON 数据的解析和生成。
缺点:
- 功能有限:JSON 不支持复杂的数据类型(如日期、时间)和注释。
- 不支持函数:JSON 仅用于数据表示,不能包含可执行的代码。
结论
JSON 已成为现代 Web 开发中广泛使用的数据交换格式,因其简单、灵活和易于使用而受到开发者的青睐。无论是在 API 开发、数据存储还是配置管理中,JSON 都发挥着重要作用。
SDL_Event event
SDL_Event event;
是 SDL (Simple DirectMedia Layer) 库中用于处理各种事件的一个声明。SDL_Event
是一个结构体,用于封装来自用户的输入事件以及系统产生的事件,如键盘按键、鼠标移动、窗口大小变化等。
SDL_Event
结构体
SDL_Event
结构体定义在SDL_events.h
头文件中,它包含了一个联合体(union)和一个事件类型字段,用于处理不同类型的事件。下面是SDL_Event
结构体的基本定义:1typedef struct _SDL_Event { 2 union { 3 // 用于存储不同类型的事件数据 4 // ... 5 } u; 6 7 Uint32 type; // 事件类型 8} SDL_Event;
事件类型
type
字段是一个Uint32
类型的成员,用于标识事件的类型。常见的事件类型包括但不限于:
SDL_QUIT
: 窗口关闭请求。SDL_KEYDOWN
和SDL_KEYUP
: 键盘按键按下和释放。SDL_MOUSEBUTTONDOWN
和SDL_MOUSEBUTTONUP
: 鼠标按钮按下和释放。SDL_MOUSEMOTION
: 鼠标移动。SDL_WINDOWEVENT
: 窗口事件,如大小变化、最小化等。SDL_JOYAXISMOTION
: 手柄轴运动。SDL_CONTROLLERBUTTONDOWN
和SDL_CONTROLLERBUTTONUP
: 控制器按钮按下和释放。SDL_AUDIODEVICEADDED
和SDL_AUDIODEVICEREMOVED
: 音频设备添加和移除。示例代码
下面是一个简单的示例,展示了如何使用
SDL_Event
结构体来处理事件:1#include <SDL.h> 2 3int main(int argc, char* argv[]) 4{ 5 if (SDL_Init(SDL_INIT_VIDEO) < 0) { 6 fprintf(stderr, "SDL could not initialize! SDL_Error: %s\n", SDL_GetError()); 7 return 1; 8 } 9 10 SDL_Window* window = SDL_CreateWindow("Event Handling Example", 11 SDL_WINDOWPOS_CENTERED, 12 SDL_WINDOWPOS_CENTERED, 13 800, 600, 14 SDL_WINDOW_SHOWN); 15 if (window == NULL) { 16 fprintf(stderr, "Window could not be created! SDL_Error: %s\n", SDL_GetError()); 17 return 1; 18 } 19 20 SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); 21 if (renderer == NULL) { 22 fprintf(stderr, "Renderer could not be created! SDL_Error: %s\n", SDL_GetError()); 23 return 1; 24 } 25 26 bool quit = false; 27 SDL_Event event; 28 29 while (!quit) { 30 while (SDL_PollEvent(&event)) { 31 switch (event.type) { 32 case SDL_QUIT: 33 quit = true; 34 break; 35 case SDL_KEYDOWN: 36 printf("Key pressed: %d\n", event.key.keysym.sym); 37 break; 38 case SDL_MOUSEB