《C和指针》——笔记

第一章  温故知新

  1. 注释已经含有注释/**/的代码块
    #if 0
        statements
        /**/ 
        statements
    #endif
  2. %g打印一个浮点值

  3. scanf函数有返回值——成功转换并存储于参数中的值得个数

    int num;
    //scanf失败返回0,成功返回转换的值的个数
    if( 1==(scanf("%d", &num)) )
    {
        statements...
    }
  4. 三字母词——以??作为开头,如??{    [
  5. 下方代码对于指针声明并初始化——不是把初始值赋值给*message,而是把字符串常量的第1个字符的地址赋值给message这个指向字符的指针
    char *message = "hello_world";
    //等同于下方声明
    char *message;
    message = "hello_world";
  6. 尽量使用复合赋值符: += 等。
  7. 有符号值的右移位操作符(>)是不可移植的。逻辑移位0填充,算数移位符号位填充。
  8. ++a的结果是对a值的拷贝,并不是变量本身。所以++a = 10; 是错的。
  9. 逗号操作符: 如下多个表达式自左向右逐个求值,整个逗号表达式的值为最后expressionN的值。
    while(expression1,expression2,...,expressionN){
        statements
    }
  10. 数组不会对下标值进行有效性检测

  11. C并不具备显式的布尔类型,所以用整数来代替。0是假,非0值(包括负数)都为真。不要混用整形和布尔型值。

  12. 如果p是一个指向char的指针,那么p+1指向下一个char;如果p是一个指向float的指针,p+1指向下一个float。

  13. 函数若不需要参数,声明如下例子(关键字void提示没有任何参数,而不是代表有一个类型为void的参数):

    int func(void);
  14. size_t类型是无符号整数。

  15. strlen返回值是size_t类型,因此下列表达式中第二条语句将永远为真。操作符(>=)左边的表达式是无符号数,不可能为负:

    if( strlen(x) >= strlen(y) ) ...
    if( strlen(x) - strlen(y) >=0  ) ...
  16. strncpy不会默认添加'\0'结尾,因此需要赋值保证以'\0'结尾:

    char buffer[BSIZE];
    ...
    strncpy(buffer, name, BSIZE);
    buffer[BSIZE - 1] = '\0';
  17. 标准库函数更具移植性:例如大写字母判断,采用isupper()库函数,无论机器使用哪个字符集(EBCDIC),都能顺利运行。

    if( ch <= 'Z' && ch >= 'A')...
    if( isupper(ch) )...
  18.  

    ...

     

     

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值