文章

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可能需手动补\0strncat自动补
  • x64系统中 指针类型 占 8 字节
1
2
celsius = 5 / 9  * (fahr-32);  // ERROR
celsius = 5.0 / 9  * (fahr-32);  // √
  • 变量名只能包含 字母、数字、下划线,只能以 下划线字母 开头
本文由作者按照 CC BY 4.0 进行授权

热门标签