#include <stdio.h>#include <assert.h>staticint divide(int a, int b) {
assert(b != 0);
return a / b;
}
intmain(void) {
printf("%d\n", divide(10, 2));
return0;
}
#include <stdio.h>
#include <assert.h>
static int divide(int a, int b) {
assert(b != 0);
return a / b;
}
int main(void) {
printf("%d\n", divide(10, 2));
return 0;
}
📚 C 语言的「灵魂操作」。当你不知道运行时需要多大数组时,手动申请内存。铁律:每次申请都要检查返回值;用完 free,否则泄漏。
常用函数(每个函数附完整、可编译示例)
malloc(n) —— 申请 n 字节,值未初始化
#include <stdio.h>#include <stdlib.h>intmain(void) {
int n = 5;
int *arr = (int*)malloc((size_t)n * sizeof(int));
if (!arr) { printf("内存不足\n"); return1; }
for (int i = 0; i < n; i++) arr[i] = i * 10;
for (int i = 0; i < n; i++) printf("%d ", arr[i]);
printf("\n");
free(arr);
return0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n = 5;
int *arr = (int*)malloc((size_t)n * sizeof(int));
if (!arr) { printf("内存不足\n"); return 1; }
for (int i = 0; i < n; i++) arr[i] = i * 10;
for (int i = 0; i < n; i++) printf("%d ", arr[i]);
printf("\n");
free(arr);
return 0;
}
calloc(n, sz) —— 申请 n*sz 字节并清零
#include <stdio.h>#include <stdlib.h>intmain(void) {
int *a = (int*)calloc(5, sizeof(int));
if (!a) return1;
for (int i = 0; i < 5; i++) printf("%d ", a[i]);
printf("\n");
free(a);
return0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *a = (int*)calloc(5, sizeof(int));
if (!a) return 1;
for (int i = 0; i < 5; i++) printf("%d ", a[i]);
printf("\n");
free(a);
return 0;
}
realloc(p, n) —— 扩大/缩小内存块(先存临时变量!)
#include <stdio.h>#include <stdlib.h>intmain(void) {
int *arr = (int*)malloc(3 * sizeof(int));
if (!arr) return1;
arr[0] = 10; arr[1] = 20; arr[2] = 30;
int *tmp = (int*)realloc(arr, 6 * sizeof(int));
if (!tmp) { free(arr); return1; }
arr = tmp;
arr[3] = 40; arr[4] = 50; arr[5] = 60;
for (int i = 0; i < 6; i++) printf("%d ", arr[i]);
printf("\n");
free(arr);
return0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *arr = (int*)malloc(3 * sizeof(int));
if (!arr) return 1;
arr[0] = 10; arr[1] = 20; arr[2] = 30;
int *tmp = (int*)realloc(arr, 6 * sizeof(int));
if (!tmp) { free(arr); return 1; }
arr = tmp;
arr[3] = 40; arr[4] = 50; arr[5] = 60;
for (int i = 0; i < 6; i++) printf("%d ", arr[i]);
printf("\n");
free(arr);
return 0;
}
#include <stdio.h>#include <assert.h>staticint divide(int a, int b) {
assert(b != 0);
return a / b;
}
intmain(void) {
printf("%d\n", divide(10, 2));
return0;
}
#include <stdio.h>
#include <assert.h>
static int divide(int a, int b) {
assert(b != 0);
return a / b;
}
int main(void) {
printf("%d\n", divide(10, 2));
return 0;
}
📚 C 语言的「灵魂操作」。当你不知道运行时需要多大数组时,手动申请内存。铁律:每次申请都要检查返回值;用完 free,否则泄漏。
常用函数(每个函数附完整、可编译示例)
malloc(n) —— 申请 n 字节,值未初始化
#include <stdio.h>#include <stdlib.h>intmain(void) {
int n = 5;
int *arr = (int*)malloc((size_t)n * sizeof(int));
if (!arr) { printf("内存不足\n"); return1; }
for (int i = 0; i < n; i++) arr[i] = i * 10;
for (int i = 0; i < n; i++) printf("%d ", arr[i]);
printf("\n");
free(arr);
return0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n = 5;
int *arr = (int*)malloc((size_t)n * sizeof(int));
if (!arr) { printf("内存不足\n"); return 1; }
for (int i = 0; i < n; i++) arr[i] = i * 10;
for (int i = 0; i < n; i++) printf("%d ", arr[i]);
printf("\n");
free(arr);
return 0;
}
calloc(n, sz) —— 申请 n*sz 字节并清零
#include <stdio.h>#include <stdlib.h>intmain(void) {
int *a = (int*)calloc(5, sizeof(int));
if (!a) return1;
for (int i = 0; i < 5; i++) printf("%d ", a[i]);
printf("\n");
free(a);
return0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *a = (int*)calloc(5, sizeof(int));
if (!a) return 1;
for (int i = 0; i < 5; i++) printf("%d ", a[i]);
printf("\n");
free(a);
return 0;
}
realloc(p, n) —— 扩大/缩小内存块(先存临时变量!)
#include <stdio.h>#include <stdlib.h>intmain(void) {
int *arr = (int*)malloc(3 * sizeof(int));
if (!arr) return1;
arr[0] = 10; arr[1] = 20; arr[2] = 30;
int *tmp = (int*)realloc(arr, 6 * sizeof(int));
if (!tmp) { free(arr); return1; }
arr = tmp;
arr[3] = 40; arr[4] = 50; arr[5] = 60;
for (int i = 0; i < 6; i++) printf("%d ", arr[i]);
printf("\n");
free(arr);
return0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *arr = (int*)malloc(3 * sizeof(int));
if (!arr) return 1;
arr[0] = 10; arr[1] = 20; arr[2] = 30;
int *tmp = (int*)realloc(arr, 6 * sizeof(int));
if (!tmp) { free(arr); return 1; }
arr = tmp;
arr[3] = 40; arr[4] = 50; arr[5] = 60;
for (int i = 0; i < 6; i++) printf("%d ", arr[i]);
printf("\n");
free(arr);
return 0;
}
#include <iso646.h>
#include <stdio.h>
intmain() {
int a = 5, b = 3;
// 使用文字运算符if (a > 0 and b > 0) {
printf("a 和 b 都大于 0\n");
}
if (a not_eq b) {
printf("a 不等于 b\n");
}
int c = a bitand b; // 按位与int d = a bitor b; // 按位或printf("a & b = %d\n", c);
printf("a | b = %d\n", d);
return0;
}
⚠️ 1. C++ 中 and、or、not 等是关键字,不需要包含 <iso646.h>。
2. 这个头文件在 C++17 中已弃用,C++20 中已移除。
3. 纯 C 语言中必须包含 <iso646.h> 才能使用这些宏。
💡 💡 现代 C++ 代码中可以直接用 &&、||、! 等符号运算符,不需要用文字别名。
但在一些老旧的 C 代码或特定编码环境中可能会遇到这些宏。
▼15.17 <complex.h> —— 复数运算(complex.h,C99)C 语言
是什么
📚 C99 引入的复数数学库,提供复数类型和复数运算函数。
📚 C 语言中用 _Complex 关键字定义复数,C++ 中用 std::complex 类。
📚 <complex.h> 是 C++ 对 C 语言 <complex.h> 的兼容版本。
⚠️ 注意:下面的代码示例使用 C 语言语法(double complex、I 宏),因为 <complex.h> 是 C 兼容头文件。
在纯 C++ 中这些代码可能无法编译,C++ 程序员应使用 <complex> 头文件的 std::complex 类。