1.学习一门新的程序设计语言的途径就是用它来写程序。
2.函数之间进行数据交换的一种方法是调用函数向被调用函数提供值(参数)列表。
3.类似于\n的字符序列为不可输入的字符或不可显示的字符提供了一种通用的可扩充机制。
4.声明用于说明变量的属性
5.数据类型包含了两种特性:1.申请多大的内存空间(所能表示的范围)。2.所能进行的操作。
6.要写出让人能看懂的代码,而不仅仅是机器能看懂的代码。
7.
printf(" %3d %6d\n", fahr, celsius);
这样打印出来的fahr占3个字节宽,celsius占6个字节宽
效果如: 1
12
123
8.不同类型的数或变量进行求值时会强制类型转换求值。
9.对于1个问题,我们可以用N种方法来解决(开放性思维)。
10.C语言的一个通用规则:在允许使用某种类型变量的地方,都可以使用该类型的更复杂的表达式。
11.符号常量,如1,200等“幻数”不能提供给阅读该程序的人信息,这些符号常量应该用字符串来代替 如 #define MAX 100
12.信息就是位+上下文。
13.单引号中的字符表示一个整数,该值等于ASCII值,如‘A’的ASCII值是65,但‘A’比65好,因为它的意义更清楚,且与特定的字符集无关。
14.词法分析分解符号遵循大嘴法(分解到不可能组成有意义的符号为止)。
15.判断一个表达式的求值,可以先把表达式按照词法分解原则来分解,再通过优先级来判断(同等优先级的就看结合顺序)
16.常量数以0开头解析为8进制,017就解释为8进制 '\12'的ascii就是8进制的12 '\x13' 的ascii 就是16进制的13(依次类推,联想),如果进行缓冲区溢出就可以直接用'\x数字'来表示机器码了(数字直接替换为机器码,因为这种字符表示在内存中就是用\x后的数字来表示的)。
17.用双引号引起来的字符串,表示的是指向某个无名数组的指针,这个无名数组是由双引号里面的字符和一个额外添加的‘\0’组成(字符是一个整数,字符串是一个指针)。
18.
#include <stdio.h>
int main(void)
{
int *p;
int **q;
int a=1;
int b=1;
q=&p;
p=&a;
// int c=a+++++b; //a ++ ++ + b 分解成这样,再根据优先级组合得(a++)++(+b);
//++操作符需要和一个变量才能组合成一个合法的表达式
//a++求值后是一个数 +b求值后也是一个数,根据结合性++与(+b)
//结合,而+b是一个数,所以不能组成
//合法表达式,报错
b=b*++a;
}
19.指针指向特定函数地址并调用
#include <stdio.h>
void print(void)
{
printf("hello world\n");
}
int main(void)
{
(*((void(*)())&print))(); // (*((void(*)())函数地址))
//(*((void(*)())函数地址))()调用函数
return 0;
}