C高阶2:变量作用域与生存期

变量的作用力和生存期相当于变量的"攻击范围"和"生命力"。

1. 作用域

1.1 作用域是什么?

在什么范围内可以访问这个变量。

1.2 作用域怎么用?

试一下下面的代码

#include 

int main(){
    int n =0;
    for(int i=0;i<10;++i){
       n += i;
    }
    printf("%d %d\n",i,n);
}
#include 

int main(){
    {
       int n =0;
       printf("%d\n",n);
    }
    printf("%d\n",n);
}
#include 

int main(){
    {
       int n =0;
       printf("%d\n",n);
    }
    {
       int n =10;
       printf("%d\n",n);
    }
}

局部变量作用域在变量定义的大括号以内。

2. 生存期

2.1 生存期是什么?

变量什么时候出现到什么时候灭亡。
对于局部变量,生存期与作用域一致。

2.2 生存期怎么用?

#include 
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 
void print_array(int arr[],int n){
    for(int i=0;i

不要返回局部变量的地址,不要返回局部变量的地址,不要返回局部变量的地址。

3. 同名隐藏

在相同作用域中,同名变量会报错;在不同的作用域中,内部变量会隐藏外部变量。

#include 
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;
}

你可能感兴趣的:(C高阶2:变量作用域与生存期)