变量的作用力和生存期相当于变量的"攻击范围"和"生命力"。
1. 作用域
1.1 作用域是什么?
在什么范围内可以访问这个变量。
1.2 作用域怎么用?
试一下下面的代码
#include <stdio.h>
int main(){
int n =0;
for(int i=0;i<10;++i){
n += i;
}
printf("%d %d\n",i,n);
}
#include <stdio.h>
int main(){
{
int n =0;
printf("%d\n",n);
}
printf("%d\n",n);
}
#include <stdio.h>
int main(){
{
int n =0;
printf("%d\n",n);
}
{
int n =10;
printf("%d\n",n);
}
}
局部变量作用域在变量定义的大括号以内。
2. 生存期
2.1 生存期是什么?
变量什么时候出现到什么时候灭亡。
对于局部变量,生存期与作用域一致。
2.2 生存期怎么用?
#include <stdio.h>
int* func(){
int n=10;
int* p = &n;
return p;
}
int main() {
int* p = func();
// printf("p = %p\n",p);
printf("*p = %d\n",*p);
return 0;
}
#include <stdio.h>
void print_array(int arr[],int n){
for(int i=0;i<n;++i){
printf("%d ",arr[i]);
}
printf("\n");
}
int* scanf_array(int* n){
scanf("%d",n);
int arr[*n];
for(int i=0;i<*n;++i){
scanf("%d",&arr[i]);
}
return arr;
}
int main(){
int n;
int *arr = scanf_array(&n);
print_array(arr,n);
}
不要返回局部变量的地址,不要返回局部变量的地址,不要返回局部变量的地址。
3. 同名隐藏
在相同作用域中,同名变量会报错;在不同的作用域中,内部变量会隐藏外部变量。
#include <stdio.h>
int main() {
int n = 1;
{
printf("n = %d\n",n);
int n=10;
printf("n = %d\n",n);
n = 20;
}
printf("n = %d\n",n);
return 0;
}
网友评论