1.用单引号括起来的字符代表一个整数,用双引号括起来的字符串代表一个指针,并且字符串的末尾会有一个额外的‘\0’。
比如:char *p1 = '/'; //这是不对的, '/'并不是一个指针,而是代表一个常数。
char *p2 = "hello";//正确,p2指向hello这个字符串中第一个字符,并且字符串后边隐含了一个'\0'.
2.数组越界,并不一定会导致程序崩溃,还可能是你所想不到的------死循环。
比如:
int main()
{
int i=0;
int arr[10];
for(i = 0; i<=10; i++)
{
printf("hello\n");
arr[i] = 0;
}
return 0;
}
该程序就是一个死循环。当我们定义arr[10]时,内存中只会给它分配10个内存空间,下标为0到9,变量
i的空间实际是在数组之后的位置。当i变到10时,我们所要赋值的arr[10]实际是i,即循环中i为10时,i的值又被变为0,一直循环。
3.易错点:浮点数与零值的比较。(以下的a是float型)
if(a==0)
printf(".....");
if(a == 0.0)
......
以上两段代码均不对。
if(a >-exp && a < exp)
......
exp为允许的误差,一般用define宏定义给出。
4.数组长度求解。
数组长度的求解并不能用strlen函数。
strlen 函数用于求字符串长度或字符数组(有‘\0’)长度。
而要求整型数组或其他类型数组长度时,用 sizeof(数组名)/ sizeof(数组中的某一元素)。