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

2019-04-14  本文已影响0人  jdzhangxin

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

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;
}
上一篇 下一篇

猜你喜欢

热点阅读