读C语言

1.C语言大多数编译器不对数组下标进行检测,也就是说若是定义一个数组A[6],你去访问A[9],可能不会出错,可是属于非法的。因此,对数组越界检查是程序员的责任。 2.对于多维数组,若是定义一个二维数据,按照一维数据去访问,结果也操做系统的内存管理方法有关。如定义A[3][4],若是去访问A[7],结果内存管理有关,若是分配内存时按行分配,可访问的是A[2][0],若是按列分配,可能访问的是A[0][2],但编译器没有报错,只能说是没有语法错误,但内存操做是错误的。 3.定义一个整形来保存字符的优势。int a ;a= getchar(); a!=EOF || a!='\n' 能够避免溢出带来产生不是EOF却误码认为是EOF,字符的本质是整形。 4.strcpy,strncpy,memcpy,memcpy strcat这些函数的第一个参数不能是字符串常量的缘由:既然要对这个地址后面的内存进行操做,那固然不能是常量。如char const a[10] ="2324", char b[5];strncpy(a,b,3);编译器提示出错,是由于a是一个字符串常量。 5.不要觉得读取一行就用户gets(),当一行的输入太长,也会溢出,这时只能用fgets(); 6.关于char 类型, ansi规定了一个缺省的范围是0 ~ 127 。可是不一样的编译器默认的char 范围是不一样的,多是默认为unsigned char ,多是signed char,具体由编译器决定,但C的库函数的不少参数都是char,这就可能会出现移植性与效率方面的差别,因此,最好是把char 的范围控制在unsigned 与 signed之间, 也就是ansi规定的一个缺省。另外,字符类型的本质仍是一个整型。
相关文章
相关标签/搜索