1.static说明适用于外部变量和函数,用于把这些对象的作用域限定为被编译源文件的剩余部分。
- 可以在通常的说明之前前缀以关键词static来指定静态存储,使得变量可以被A函数调用,但不能被调用A函数的B函数访问。这样用static说明的变量就不会和同一程序中其他文件中的同名名字相冲突。
- static也可以用于说明函数。如果一个函数被说明为静态的,那么该函数名字就不能出现除该函数说明所在的文件之外的其他文件之中。
- static也可用于内部变量。和自动变量一样,static说明的内部变量也只作用于某一特定函数内部。但它不会随所在函数的调用与退出而消失,而是一直存储于内存中。
练习:修改g e t o p函数,使之不再需要使用 u n g e t c h函数。提示:使用一个内部静态变
量
int gettop (char s[] ){//取下运算符或运算分量
int i,c;
static int lastc=0;
**if( lastc == 0)
c = getch();//如果LASTC为空,读入新字符
else {
c = lastc;
lastc = 0;//如果LASTC不为空,将他赋值给C,然后清空LASTC
}**
while ( (s[0] = c = getch()) == ' ' || c == '\t' ) //如果读入的是空白符或者制表符,跳过字符
;
s[1] = '\0';//将数组作废
if ( !isdigit(c) && c != '.' && c != '-') //如果读入的字符 不是数字或者小数点,返回字符
return c;
i = 0;
if ( c == '-' ){
if ( isdigit(s[++i] = c = getch() ) || c == '.')
s[i] = c;
else {
if ( c != EOF )
lastc = c;
return '-';
}
}
if ( isdigit(s[i]) )
while ( isdigit(s[++i] = c = getch()) )
;//如果读入的是数字,并且当下一个字符也是数字的时候 return '0';
if ( c == '.' )
while ( isdigit(s[++i] = c = getch()) )
;//如果读取的是小数点,并且下一个字符是数字是 return '0';
s[i] = '\0';//将数组标\0
if ( c != EOF ) //如果字符不是文件结束符,调用unget(c)函数,将字符存到缓冲区
lastc = c;
return NUMBER;
}