c语言细节(一)

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(数组中的某一元素)。

你可能感兴趣的:(c语言细节(一))