C陷阱与缺陷低配版

本文详细介绍了C语言中的指针运算,包括指针自增和自减,以及它们与数组的关系。同时,讲解了C库函数memset和memcpy的使用方法和应用场景。还探讨了在循环中的最佳实践,以及静态全局变量的作用域限制。最后,提到了基本输入输出函数的作用和重要性。
摘要由CSDN通过智能技术生成
  1. *和++有相等的优先级,结合自右向左,指针自增1。即先把指针指向的数据加到a上,指针再增1。
    a += *a++;
    a += *(a++);//清晰
    

  1. ar[i]和*(ar+i)的意义是等价的,但是只有当ar是一个指针变量时,才可以使用ar++这样的表达式。
    • 数组形式中,ar是地址常量,与&ar[0]一样,可以使用ar+1标识数组里的下一个元素。
    • 增量运算符只能用在变量名前,不能用在常量前。
    • *ar 中的ar是指针变量,即在指针形式中,ar是指针变量

  1. C 库函数 void *memset(void *str, int c, size_t n)复制字符 c(一个无符号字符) 到参数 str 所指向的字符串的前 n 个字符。

    void *memset(void *str, int c, size_t n)
    
    • str – 指向要填充的内存块。
    • c – 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
    • n – 要被设置为该值的字符数,单位是字节;
    • 该函数返回一个指向目标存储区 str 的指针。

  1. C 库函数 void *memcpy(void *str1, const void *str2, size_t n)从存储区 str2 复制 n 个字节到存储区 str1。

    void *memcpy(void *str1, const void *str2, size_t n)
    
    • str1 – 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
    • str2 – 指向要复制的数据源,类型强制转换为 void* 指针。
    • n – 要被复制的字节数
    • 该函数返回一个指向目标存储区 st1r 的指针。

  1. <和<=(>和>=)
    建议使用版本A
    • 版本A:
      int a[10], i;
      for (i = 0; i < 10; i++) //建议  10 - 0 = 10,一共十个数据
      {
         a[i] = 0;
      }
      
    • 版本B:
        for (i = 0; i <= 9; i++) //不建议
           {
              a[i] = 0;
          }
      

  1. A 文件中定义了一个 static int i=0;
    然后B文件用include包含了A文件,那么对于B文件来说,A文件就不是别的文件,它就是B文件的一部分静态全局变量只能在本源文件中使用,意思是你不能用extern来声明另外一个文件里的静态全局变量。

    比如 A文件里的static int i =0;
    那么B文件里extren int i就是行不通的,而如果A文件的i不是static的,那么extern int i就可以。


  1. 基本输入输出头文件

    #include<stdio.h>
    

    基本输入输出头文件,没有也可以编译运行程序。但无法使用下面的基本输入输出函数

    int getchar()//从标准输入设备写入一个字符
    int putchar()//向标准输出设备读出一个字符
    int scanf(char *format[,argument…])//从标准输入设备读入格式化后的数据
    int printf(char *format[,argument…])//向标准输出设备输出格式化字符串
    char *gets(char *string)//从标准输入设备读入一个字符串
    int puts(char *string)//向标准输出设备输出一个字符串
    int sprintf(char *string,char *format[,])//把格式化的数据写入某个字符串缓冲区
    
    

  1. printf里的栈

    printf里的栈,对于float类型,都强制转换成8字节的double进栈。按照我的理解,%f在设计中是读取8个字节,这样既可以用来读取float型,也可以用来读double型。


  1. goto
    用于跳出嵌套循环

  1. return;
    只能用于void类型的函数中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值