函数中的内部变量会被回收

在 C 语言中,函数中的内部变量会在函数执行完成(调用出栈)之后被回收,因此不能将内部变量的指针赋值给函数外部的变量:

  1. void foo(char *p) {
  2. p = "Hello, World!";
  3. // 错误,函数中的内部变量会在函数执行完成(调用出栈)之后被回收
  4. }

? : 运算符优先级比 + - * / %

在 C 语言中,三目运算符 ? : 的优先级是很低的,比 + - * / % 运算符都要低,因此需要注意避免出现以下问题:

  1. int i = 10 + ok ? 1 : -1;
  2. // 该表达式的实际运算优先级是
  3. // int i = (10 + ok) ? 1 : -1;

数组变量被当作指针处理

在 C 语言中,数组变量相当于该数组中第一个元素的地址,并且在调用函数过程中,被传递的数组变量实际上只是一个指针变量。因此例如 sizeof nums / sizeof nums[0] 之类的运算,应该在调用函数之前执行。

  1. void foo(int *nums) {
  2. int len = sizeof nums / sizeof nums[0];
  3. // 错误,nums 只是一个指针变量
  4. }

结构体之间的类型转换

// TODO