C 语言容易出错的特性
1
2
3
/**
* 例
*/
- (可选)解释
1
2
// 第一个元素为2,其余为0;
int a[5] = {2};
1
2
3
4
5
6
// 错误写法
double myList[4];
myList = {1.9, 2.9, 3.4, 3.5}; // 数组声明后不能再用花括号赋值
// 正确写法
double myList[4] = {1.9, 2.9, 3.4, 3.5}; // 声明时同步初始化
- 因为在 C/C++ 中,数组名是一个常量指针,不能直接用花括号给它赋值(这种赋值方式只允许在声明数组的同时进行)
1
x = y; // error, 不能直接将一个数组赋值给另一个数组,应该将数组元素一一对应赋值
1
2
#include "string.h"
scanf("%s", name); // 无需&,name本身是数组首地址
1
2
3
4
int b = 10;
// * 的不同用法
int* a; // 指针类型变量
*a = b; // 解引用
- 无 string 类,字符串必须用char[]或char*存储,搭配
的strlen/strcpy/strcmp等函数操作。
| 函数 | 功能 | 核心注意事项 |
|---|---|---|
strlen(s) | 求长度(不含\0) | 依赖\0,无则结果错误 |
strcmp(a,b) | 比较字符串 | 用==0判断相等,而非a==b(错误!) |
strcpy(dst,src) | 复制字符串 | dst必须足够大,且可修改 |
strcat(dst,src) | 拼接字符串 | dst剩余空间需足够,自动加\0 |
strncpy/strncat | 安全版本复制/拼接 | strncpy可能需手动补\0,strncat自动补 |
- x64系统中 指针类型 占 8 字节
1
2
celsius = 5 / 9 * (fahr-32); // ERROR
celsius = 5.0 / 9 * (fahr-32); // √
- 变量名只能包含 字母、数字、下划线,只能以 下划线 或 字母 开头
本文由作者按照 CC BY 4.0 进行授权