C Primer Plus,5th Edition 复习(二)

第十一章: 字符串和字符函数


1、字符串 = 字符数组+'\0';

2、printf("%s %p %c\n","we","are","student"); //%p输出十六进制的内存地址

3、char heart[]="I love Title!";
   char *head  ="I love Title!";
   heart是个常量,head是个变量
   putchar(heart[i]);    对  putchar(head[i]);   
   putchar(*(heart+i)); 对  putchar(*(head+i)); 对
   putchar(*(heart++));  错  putchar(*(head++)); 

4、char name[MAX];
   char *ptr;
   ptr = gets(name);  //多出来的字符简单溢出到相邻内存区
   ptr = fgets(name, MAX, stdin); //MAX最大读多少   ,stdin从哪个文件读
   puts(普通人);
   fputs(ptr, stdout);

5、最有用和最常用字符串函数
   strlen(str);
   strcat(str1,str2);      strncat(str1,str2, n);
   strcmp(str1,str2);      strncmp(str1,str2, n); 
   strcpy(str1,str2);      strncpy(str1,str2, n); 
   sprintf(str,"%d %f“,1,1.5);
  
   其他一些字符串函数:
   char *strchr(s,c);    //s中含有c的第一个位置
   char *strrchr(s,c);   //s中含有c的最后一个位置
   char *strpbrk(s1,s2); //s1中存放s2的第一个位置
   char *strstr(s1,s2); 

6、命令行参数
   int main(int argc, int char *argv[])
   argc: 字符串数目
   argv:字符指针数组

   例子: c>code "i am a student" now
   code: code.c程序名
   argv[0]=code
   argv[1]="i am a student"   //可以通过引号连接字符串
   argv[2]=now

7、字符串转为数字
   A) atoi(str);   atol(str)
      atof(str);   返回double型

   B)strtol();  返回long
     strtoul(); 返回unsigned long
     strtod();  返回double
 
   原型:long strtol(const char *npr, char **endptr, int base);
   第一个参数: 待转化字串
   第二个参数: 指向标志输入数字的结束字符的指针
   第一个参数: 转化为几进制

8、itoa()和ftoa()把数字转化为字符串,但两个函数不在ANSI C中,
   为了兼容性更好,常用sprintf代替

 

 

第十二章: 存储类,链接和内存管理

 

1、链接 static
   int a=5;  //文件作用域,外部链接
   static int b = 3; //文件作用域,内部链接
   int main()
   {...}

 

2、5种存储类(P324表,综合例子P33)    

         
   1)自动变量:函数或代码块头部定义的任意变量
     int proc(void)
     {
       (auto)int plox;   (auto)可选
        . . .
      }

 

   2)寄存器变量
      代码块内声明,寄存器变量多是存放在一个寄存器中而非内存中,故无法获得其他地址
      int proc(register int a)
      {
         register int quick;
         。。。
      }
      !可以使用register声明的类型有限,cpu可能无足够内存容乃double类型

 

   3)具有外部链接的静态变量
      声明在所有函数之外的具有文件域、外部链接和静态存储时期的变量;
      为使程序清晰,可在使用外部变量的函数中再次用extern声明

 

   4)具有内部链接的静态变量
      定义在所有函数之外,使用static,具有内部静态链接的静态变量只可以
      被与它在同一个文件中的函数使用。
      int a=1;  //外部链接
      static int b=1; //内部链接
      int main()
      {
        extern int a; //使用全局变量a
        extern int b; //。。。。。。b
       }

 

    5)空链接的静态变量
       定义在代码块内,使用static.
       int prov(void)
       {
          static int a;
          ......
       }

 

3、多文件中共享变量,一般一个文件定义外部变量,其他文件使用extern引用该变量

 

4、存储类和函数
      使用static存储类的原因之一就是创建一个特定模块所私有的函数,从而避免
   了可能的名字冲突。
      使用extern来声明在其他文件中定义的函数,这一习惯做法主要是为了使程序
   更清晰,因为除非函数声明使用static,否则默认extern
      double gama();      //外部链接,可以被其他文件中的。。。使用
      extern int procB();   //外部链接,可以被其他文件中的。。。使用
      static int procA();   //特定模块私有

5、随机数函数的使用
   #include<stdlib.h>  //为srand()函数提供原型
   #include<time.h>    //为time()函数提供原型
   int main(void)
   {
     scrand((unsigned int)time(0));  //随机化种子
     int r = rand()%b+a;               //取得[a,b)之间的一个随机值
     ......
    }

 

6、分配内存:malloc()和free()
   double *ptd;
   分配: ptd=(double *)malloc(MAX*sizeof(double));
   释放: free(ptd);


   另一种分配方法:
   long *mem;
   mem=(long *)calloc(100, sizeof(long));
   free(mem);

 

7、类型限定词
   1)const 将数据限定为不变
   2)volatile 表明数据除可以被程序修改还可以通过其他方式修改,其目的
      是警示编译器在优化时不要做出相反的假设。
   3)restrict也是为优化而设置(只可以用于指针),由restrict限定的指针被认为是对其所指向
      的数据块的唯一访问途径

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值