飞道的博客

K&R阅读知识点1

214人阅读  评论(0)

K&R阅读注意点

一、

1、解决幻数问题

ANS:
幻数:一些值直接写入函数中,不利于系统化修改。(常量表达式)
例子

  for (fahr = 0; fahr <= 300; fahr = fahr + 20) 

方法:给它们设定有意义的名字。#define 语句将一个符号名字或是符号常量定义为一串特定的字符:

  #define  名字  替换文本 

转变

 	#define LOWER  0    /* 温度表的下限 */ 
    #define UPPER  300   /* 温度表的上限 */ 
    #define STEP   20   /* 步长 */ 
 	for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP) 
2、指针&数组
  • 指针
    B(被调用函数)内部需要修改A(调用函数)中变量的值,A(调用函数)必须提供这个变量的地址address给B(被调用函数),B(被调用函数)必须将对应参数声明为一个指针,并通过该参数间接访问这个变量。
  • 数组
    当数组名作为参数时,传递给函数的值是这个数组的起始位置(或称起始地址),数组的元素并不进行拷贝。通过下标的方式,函数可以访问并修改数组内的任意元素。
 char line[MAXLINE];     
 char longest[MAXLINE];
 copy(longest, line); 
 void copy(char to[], char from[]) 
  { 
      int i; 
         
     i = 0; 
     while ((to[i] = from[i]) != '\0') 
    ++i; 
  } 
3、外部变量


外部变量必须在所有函数之外**定义**,且只能定义一次;该定义为变量预留出存储空间。
每个希望访问该变量的函数中还必须声明它;该声明说明了变量的类型。

extern 语句

说明:
如果程序分为多个源文件,而且变量在文件 1 中定义,并在文件 2 和文件 3 中使用,那么在文件 2 和文件 3 中就需要用 extern 声明来关联出现的变量。
做法是将变量和函数的extern 声明放在一个单独的文件中(其历史称谓为头文件).h。

4、注意点:

定义:
  int max;
  #define LOWER  0   
   int power(int base, int n) 
   {
       ...
   }
声明:
  extern int max; 
  int power(int, int); 
  返回值类型 函数名称(可能存在的形参声明) 
    { 
        声明部分 
        语句序列 
    } 

二、类型、运算符以及表达式

1、常量:

2、声明

所有变量在使用之前都必须声明,

  • 一个声明指定了一个类型,并包含了由一个或多个此类型的变量组成的列表
  • 可在其声明中进行初始化
    char esc = ‘\\’; 
    int  i = 0; 
    int  limit = MAXLINE+1; 
    float eps = 1.0e-5; 

限定符 **const** 可被应用于任何变量的声明中, 指明该变量的值不会被改变。

 const double e = 2.71828182845905; 
    const char msg[] = “warning:; 
    /*表明此函数不会修改这个数组*/
  int strlen(const char[]); 
3、类型转换

4、递增与递减运算符

++n 在 n 的值被使用之前将 n 递增,而 n++ 则在 n 的值使用之后再将其递增.

5、按位运算符


注意:按位运算符与逻辑运算符

x=1; y=2; x&y为0; x&&y为1
x << 2 (相当于 x 乘以了 4)

6、赋值运算符 op =

  expr 1   op = expr 2
  相当于
  expr 1  = (expr 1 )  op  (expr 2 ) 
7、条件表达式

expr 1 ? expr 2 : expr 3

  for (i = 0; i < n; i++) 
        printf(%6d%c”, a[i], (i%10==9 || i==n-1) ? ‘\n’ : ‘ ’); 
8、算符优先级与求值次序

注意点:
函数调用、嵌套的赋值语句以及递增和递减运算符会引起“副作用”——对表达式的求值会附带造成某些变量的改变。
在任何带有副作用的表达式中,对组成表达式的变量的求值次序存
在着微妙的依赖关系。

如:

 a[i] = i++; 

——————————————————————————————————————————
参考文献:C程序设计语言(K&R)


转载:https://blog.csdn.net/qq_41070511/article/details/104799242
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场