大一的c语言笔记(一)
(2010-07-19 19:36:06)
标签:
杂谈 |
分类: c语言 |
注:这一系列的笔记没有顺序可言,只是记录遇到的问题
Scanf
在读取时,只有%C不会跳过空白(空格,tab,回车),其他都将作为读入的结束,或者再开头被跳过。
%s将把空白作为结束符。
数组
C并不负责检查数组范围,这有可能导致数据存到数组范围之外,但这个位置可能存储了某些值。
字符串中的值有可能被误解释为三字母词。
标准允许指针与数组后边界以后的地址进行比较,但不允许与前边界之前的地址比较。
只有数组名在表达式中的时候,编译器才会对其产生一个指针常量。有两点特殊:在sizeof时,返回的是数组的总长度。在&数组名产生的是指向数组的指针,不是指向指针常量的指针。
有个问题:二维数组的第一维的地址存在哪里?(答:二维数组是一个元素为一维数组的一维数组)
直接定义二维数组的话,数组是连续的内存地址。每个第二维的数组的首地址相隔sizeof(第二维数组)
Sizeof(数组名)得到的是数组所占的字节数。
传递二维数组的话,要写为int (*a)[10] 而不是 int **a;
逻辑上的错误
&&如果前面的数值为false 则后面的表达式将不被求值
一个花括号为一个作用域,域内定义的变量将不能在外部使用。
(这个括号包括循环体等的括号)
=的时候,等号左边的值为表达式的值,if()内验证的是表达式的值
!n,如果n是非零的数,!n=0。
文件读取
Eof的所需要的位数远大于char,如果按char读入的话,\377读入再加长则为eof
定义
用Define定义指针的话,将导致定义上的错误
#define haha char *;
这样将定义a为指针但b为字符
尽量使用typedef 定义新变量类型
Typedef char *haha;
Haha a,b
允许使用字面值常量的地方都可以使用define定义的常量,但是const定义的常量只能用在变量可以使用的地方。
用static声明静态变量的话,内存中存储的变量值将在程序的运行期间一直存在。但是该变量仍然只能在声明变量的代码块内被访问,但是初始化依然与顶层变量一起进行。
Register将指定寄存器变量,用于自动变量的声明。
Const
Int * const p…则p为常量
定义指针的话。。未进行初始化时,缺省值是随机的。。名曰“野指针”,但野指针不等同于NULL指针。
函数的声明可以只写变量的类型而不写变量名。
指向结构体的指针初始化的时候是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。如果boy是被说明为stu类型的结构变量,则:
是正确的,而:
是错误的。
“.”的优先级高于“*”

加载中…