六、C语言进阶:变量作用域与生存期

本文详细介绍了C语言中变量的作用域、生存期及其使用方法。局部变量的作用域限制在定义它们的代码块内,生存期与作用域一致。同名变量在不同作用域中,内部变量会隐藏外部变量。文中通过示例代码展示了这些概念,并强调了不应返回局部变量的地址。此外,还讨论了动态内存分配和指针在管理变量生存期中的应用。
摘要由CSDN通过智能技术生成

6 变量作用域与生存期

6.1 作用域

6.1.1 什么是作用域?

变量作用的范围

6.1.2 作用域怎么用?

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

#include <stdio.h>
int main(){
    {
        int n = 0;
        for(int i= 0;i < 10;++i){
            n+=i;
        }
        printf("%d\n",n);
    }
    {
        int n = 10;
        printf("%d\n",n);
    }
    //printf("%d\t%d\n",n,i)
}

6.2 生存期

6.2.1 什么是生存期?

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

6.2.2 生存期怎么使用?

#include <stdio.h>
int* func(){
    int n = 100;
    int*p = &n;
    return p;
}
int main(){
    int* p = func();
    // printf("%p\n",p);
    printf("%d\n",*p);
}
#include <stdio.h>
#include <stdlib.h>
void PrintArr(int* arr,int n){
    for(int i = 0;i < n;++i){
        printf("%d ",arr[i]);
    }
    printf("\n");
}
int* ScanArr(int* n){
    int m;
    scanf("%d",&m);
    //int arr[n]; //不能返回局部变量的地址
    int* arr = malloc(sizeof(int)*m);
    for(int i = 0;i < m;++i){
        scanf("%d",&arr[i]);
    }
    *n = m;
    return arr;
}
int main(){
    int n;
    int* arr1 = ScanArr(&n);
    PrintArr(arr1,n);
    free(arr1);
    arr1 = NULL;
}

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

6.3 同名隐藏

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

#include <stdio.h>
int n = 10;
void PrintN(){
    printf("%p\t%d\n",&n,n);
}
int main(){
    printf("%p\t%d\n",&n,n);
    PrintN();
    int n =100;
    printf("%p\t%d\n",&n,n);
    {
        n = 1000;
        printf("%p\t%d\n",&n,n);
    }
}
0x601024	10
0x601024	10
0x7ffcc16420ac	100
0x7ffcc16420ac	1000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值