1. 任何指针都是指向某种类型的变量
2. 如果一个指针指向的是数组中的一个 元素,那么我们只要给这个指针加1,就能够得到指向数组中下一个元素的指针,同样的,如果我们给这个指针减1,得到的就是指向该数组中前一个元素的指针。
3. 如果我们在应该出现指针的地方,却采用了数组名来代替,那么数组名就被当做指向该数组下标为0的元素的指针。
4. 对于int calendar[12][31] ,而calendar[4]又是什么含义呢?
因为calendar是一个有着12个数组类型的元素的数组,它的每个数组类型元素又是一个有着31个整形元素的数组,所以calendar[4]是calendar数组的第5个元素,是calendar数组中12个有着31个整形元素的数组之一,因此,calendar[4]的行为也就表现为一个有着31个整形元素的数组的行为。例如,sizeof(calendar[4])的结果是31与sizeof(int)的乘积。
5. C语言中,字符串常量代表了一块包括字符串中所有以及一个空字符(‘\0’)的内存区域的地址。
6. 在C语言中,我们没有办法可以将一个数组作为函数参数直接传递。如果我们使用数组名作为参数,那么数组名会立刻被转换为指向该数组第1个元素的指针。因此,将数组作为函数参数毫无意义。所以,C语言中会自动地将作为参数的数组声明为相应的指针声明。
7. 复制指针并不同时复制指针所指向的数据。
8. 编译器保证由0转换而来的指针不等于任何有效的指针。
9. C预言中,一个拥有n个元素的数组,却不存在下标为n的元素,它的元素的下标范围是从0到n-1为止。
10. *buffer++ = c; 这个语句把输入字符c放到缓冲区中,然后指针buffer递增1.
11. 在大多数C语言实现中,--n >= 0至少与等效的n-- > 0一样快,甚至在某些C实现中还要更快。第一个表达式--n >= 0的大小首先从n 中减去1,然后将结果与0比较;第二个表达式则首先保存n ,从n 中减去1,然后比较保存值与0的大小。
12. 数组中实际不存在的“溢界”元素的地址位于数组所占内存之后,这个地址可以用于进行赋值和比较。当然,如果要引用该元素,那么就是非法的了。
13. C语言中的某些运算符总是以一种已知的,规定的顺序来对操作数进行求值的,而另外一些则不是这样的。例如
a < b && c < d
C语言的定义中说明a < b 应当首先被求值,如果a 确实小于b ,此时必须进一步对c < d 求值,以确定整个表达式的值。但是a大于或等于b,则无需对c < d 求值,表达式肯定为假。另外,要对 a < b 求值,编译器可能先对a求值,也可能先对b 求值,在某些机器上甚至有可能对它们同时并行求值。
14. C语言中,存在两类算术运算,有符号运算和无符号运算,在无符号算术运算中,没有所谓的“溢出”一说:所有的无符号运算都是以2的N 次方为模,这里n是结果中的位数。
15. 对于函数,如果并未显示的声明返回类型,那么函数返回类型就默认是整形。对于main()函数,返回0代表成功,返回值非0代表程序执行失败。