《C和指针》读书笔记

快速而又安全删除(注释)代码
if 0
  statements
endif
转义字符 \

\ddd ddd代表1~3个数字,表示8进制数值所代表的数字。

#######define与typedef
define的副作用

#define ptr_to_char char*
ptr_to_char a,b //a类型为char*,b类型为char`

而typedef可正确定义

typedef ptr_to_char char*
ptr_to_char a,b a,b类型均为char*
```

######static关键字
  用于函数定义或代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal,但标识符的存储类型和作用域不受影响。
  用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响。

######位的操纵
把指定位bit_number置1
```
value = value | 1 <<  bit_number;
```
把指定位bit_number置0
```
value = value & ( 1 << bit_number );
```
测试指定位bit_number
```
value & 1 << bit_number;
```

######EOF必须使用int类型的变量接收
  stdio.h中规定EOF=-1,超出了char类型的表示范围。

######sizeof不对表达式进行求值
```
int a=1,b=10;
sizeof(a = b + 1);
printf("%d",a);
```
输出结果为1,sizeof(a = b + 1)并没有向a赋任何值。

######逗号操作符的运用
``` 
a = get_value();
count_value(a);
    while (a > 0) {
        ...
        a = get_value();
        count_value(a);
    }```
利用逗号操作符可以改写为
```
while (a = get_value(), value_count(a), a > 0) {
        ...
}
```

######左值与右值
  左值代表一个位置(地址),右值代表一个值。

######函数的调用顺序
```
f() + g() + h()
```
该段代码尽管左边的加法运算必须在右边的加法运算之前执行,但对于函数调用的顺序,并没有规则加以限制。如果函数执行具有副作用,则可能由于函数调用顺序不同而产生不同结果。例如:
```
int fun() {
    static int counter = 1;
    return ++counter;
}
int main() {
    int answer;
    answer = fun() - fun() * fun();
    printf("%d\n", answer);
}
```

你可能感兴趣的:(《C和指针》读书笔记)