“The Complete Reference C"读书笔记

"The Complete Reference C" 读书笔记 (来源于尚观科技讲师文献)
2013-08-17 

"The Complete Reference C"
 

一.指针常见严重错误:
1.未初始化的指针!!!!!!
    /*The program is wrong*/

    int main(void)
    {
         int x;
         int *p;
         x = 10;
 
        *p = x; /*error, p not initialized*/

     return 0;
    }
    /*The program have bug*/
    int main(void)
    {
         int x;
 
        int *p = NULL;
 
        x = 10;
 
        *p = x; /*bug:指针p虽然被初始化为NULL,但是只是一个指向0的指针,只能保证它不会乱指,然后把x写到未知的地址中去。*/
        /*run result:Segmentation fault*/
    return 0;
     }

2.指针之间的赋值,要加强制转换--好习惯!
除了将指针赋给void *这个通用指针;所以很多返回指针的库函数都用void *这个通用指针来声明返回值;


3.指针可以进行一些二元操作,比较操作,但是前提是二个指针必须指向内存的同一个位置。二指针相减,即它们在内存中的相对位置。

4.下面这个例程描述了一种非常危险的错误 -- 又是未初始化指针!!!
    /*This program has a bug.*/
    #include <stdio.h>
    #include <string.h>

    int main(void)
    {
     char *p;
     char s[80];
 
    p = s;
 
    do{
  
        gets(s); /*read a string to s[80]*/
 
        /*Print the decimal equivalent of each character*/
 
     while(*p){
  
         printf("%d", *p++);
  
   
 
    }while(strcmp(s,"done"));
 
    return 0;
    }

    /*
    ***问题是只对p赋值一次,在第二轮循环时,p原来指向的s已经不在,s为新读入的一串新的字符串了,p成了一个未知的危险指针。
    */

    /*This program is now correct*/
    #include <stdio.h>
    #include <string.h>

    int main(void)
    {
         char *p;
 
        char s[80];
 
        do{
 
             p = s;
  
            gets(s); /*read a string to s[80]*/
 
        /*Print the decimal equivalent of each character*/
  
        while(*p){
   
            printf("%d", *p++);
  
       
 
        }while(strcmp(s,"done"));
 
    return 0;
}

5.还有很多常见的致命的错误都是因为未初始化的指针,或给一个不知道指向哪的指针赋值,惹的祸!
e.g: /*******************************/
 
    char str_a[20];
 
    char *str_p;
 
    gets(str_a);//ok
 
    gets(str_p);//error
 
    str_p = malloc(20);
 
    gets(str_p);//ok
 
    free(str_p);

/*******************************/
     char str_a[] = "hello world!";
 
    char *str_p = "hello world!";
 
    str_a[0] = 'H'; //ok
 
    *(str_p + 0) = 'H';//error,*str_p是一个常量字符串。
 
    str_p = str_a;
 
     *(str_p + 0) = 'H';//ok 

    sizeof(str_a) = 13;
    sizeof(str_p) = 4;

/************The real routine!***********************************/
    #include <stdio.h>
    #include <stdlib.h>
    int main(){
 
    char str_a[] = "hello world!";
     char *str_p = "liyang"; //const string,is never chang!
 
    puts(str_a);
 
    puts(str_p);
 
    str_a[0] = 'A';
 
    str_p = str_a; //"liyang" string never find;
 
    str_p[0] = 'B';
 
    *(str_p + 0) = 'C';
 
    puts(str_a);
 
    puts(str_p);
 
    return 0;
    }

转载于:https://www.cnblogs.com/God-boy1/articles/3703065.html

《C:完全参考手册》是一本关于C编程语言的详尽参考书籍。该书的作者是Herbert Schildt,他以其在编程领域的权威性和深入洞察力而著称。这本书适合那些想要全面了解C语言的开发者、学生和编程爱好者。 《C:完全参考手册》囊括了C语言的各个方面。它从基本概念开始介绍C语言的核心语法、数据类型、运算符和表达式等。接着,书中详细解释了关键的控制结构,例如条件语句、循环语句和函数。此外,该书还涵盖了数组、指针、字符串、结构体和文件操作等内容,使读者能够深入了解和应用这些关键概念。 作为一本完整的参考手册,《C:完全参考手册》在讲解C语言的同时,还提供了大量的示例代码和实际应用的建议。这些示例帮助读者更好地理解概念,并将其应用到实际编程中。此外,书中还包含了一些常见编程问题的解决方案,以便读者在遇到困难时能够快速找到答案。 《C:完全参考手册》还特别强调了C语言的标准库函数。它详细介绍了每个标准库函数的功能和用法,并提供了实际示例来演示其使用方式。这对于想要在C编程中有效利用标准库的开发者来说尤为重要。 总而言之,《C:完全参考手册》是一本非常全面和系统的C语言学习指南。无论是初学者还是有经验的开发者,都可以从中获得深入了解C语言的知识和技巧。通过阅读这本书,读者可以掌握C语言的核心概念,并将其应用于实际项目中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值