本帖最后由 liang7143 于 2010-10-14 15:05 编辑
4、C
阅读须知,本小节开始请**以下二个原则:
1:用情专一 —— 糟糕的设计者才会抱怨自己的工具是如此的糟糕!
2:不追求完美——任何接近完美的东西,也接近崩溃的边缘!
如有雷同,请参考雷同之处,如有非议,请参考非议之处,如本人异想天开,请直接拍死在岸边上……
毕业一年多了,工作经验也是需要谈谈的~~~先说说毕业以后对C的从新认识吧,呆会再说说自己的一个小项目~~
1)、指针和数组是有区别的,尽管a[ i ]这样的形式,总会被编译器“改写”或者解释为*(a+i)这样的指针访问。正如诗和词,诗是诗、词是词。尽管诗词二字经常连着用,但是二者还是有区别的。指针作为函数参数时,必须知道实际传递给函数的是一个数组。把一个数组定义成函数的参数时,在函数内部事实上都是一个指针。比如下面的程序:
int i[3] = {1,2,3};
void sum(int arr[])
{
arr = i;
……
return;
}
arr = i;这句是合法的,因为arr虽然声明为一个数组,但实际上是一个指针。
a[ i ]会解释成*(a+i),所以*(i+a)和i[a]这二种奇怪的方式,也是等价的~~
2)、指针在使用之前都必须初始化,可以延伸为所有变量在使用之前都初始化。也就是说变量作为右值时,其值必须确定。废弃指针一般都赋值为NULL,NULL其实就是0,那么他是指向0吗?其实不然,他不指向任何地方。
3)、像很多大牛一样,不使用goto语句。
4)、操作符优先级只记住乘除法运算大于加减法运算既可,其他地方一律加括号。
5)、不写需要依靠编译器才能确定行为的语句,比如如下问题语句:
sum(a[i++],a[i++]);
不能引用已经被释放的空间,比如如下问题语句:
p = Test();
char * Test(void)
{
char * p;
……
return p;
}
6)、时刻谨记对数组的操作是否已经越界,时刻谨记字符串需要多一个字节用来保存'\0',随时区分以下语句的区别。
char string1[] = "abc"; //大小为4
char string2[] = {'a','b','c'}; //大小为3
|