练习:字符串比较(不使用strcmp)
遍历字符串,当两者字符相等并且str1[i]和str2[i] 都不等于'\0'时,继续向后遍历
while(str1[i] == str2[i] && str1[i] != '\0'){
//&&全真为真,能运行到这 说明str1[i]=str2[i],所以只需判断str1[i]是否等于'\0'
i++;
}
ret = str1[i]-str2[i];
变量的作用域和生存周期:
作用域:变量能够使用的范围
1.局部变量:
局部变量作用域在离定义该变量最近的大括号内
2.全局变量:
全局变量作用域在整个文件中
生存周期:变量从开始被创建,到空间被回收的整个过程
1.自动型存储(局部存储)(默认存储类型)
auto int a;
将变量存放到栈区中:
1.未经初始化值为随机值
2.代码执行到变量定义时为变量开辟空间
3.超过变量的作用域回收变量空间
2.静态存储
static int a;
将变量存放到数据区中:
1.未经初始化前值为0值
2.编译时为变量开辟空间
3.代码执行结束回收变量空间
除了修饰静态变量,还有2个功能:
1.限定变量的作用域只能在本文件中使用
2.可以防止多个文件中的全局变量重名
变量类型 |
未初始化的值 |
何时开辟空间 |
何时回收空间 |
作用域 |
全局变量 |
0 |
编译时 |
代码执行结束 |
本文件内 |
局部变量 |
随机值 |
代码执行到变量定义时 |
超过变量作用域 |
离定义该变量最近的大括号内 |
静态变量 |
0 |
编译时 |
代码执行结束 |
离定义该变量最近的大括号内 |
例:
int main(){
{ static Num ;}
Num = 100;
}
Num不会赋值成功,static变量编译时,就会开辟空间,代码执行结束时回收变量但作用域还是离它最近的{},超过作用域,就不能使用了,但它在内存中存在.
3.寄存器存储:
register int a;
优先存放到CPU内部的寄存器中,如 果寄存器存满了,等价于auto存放在栈区中
4.外部存储:
extern int a;
声明一个变量或函数是在外部存储的