必看的C语言教程之变量那点事

本文介绍了C语言中自定义数据类型、结构体、联合、全局变量和静态本地变量的用法。通过示例代码展示了它们各自的特点,如typedef用于创建别名,结构体组合数据,联合内的数据覆盖,全局变量的生命周期,以及静态变量如何保持其值。同时,提到了返回本地变量地址的风险,因为函数结束后,本地变量可能会被销毁,导致不确定性。
摘要由CSDN通过智能技术生成

🍊博客主页:Geekwyz的江湖背景
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
🌟本文由 Geekwyz原创
🙏作者水平很有限,如果发现错误,欢迎留言



1.自定义数据类型

C语言提供了一个叫typedef的功能来声明一个已有的数据类型的新名字比如:typedef int length,此时length就代替int的数据类型。

#include<stdio.h>

int main(){
    typedef int len;
    len a = 1;
    printf("%d",a);
    return 0;
}
  • 自定义结构体变量
#include<stdio.h>

typedef struct data{
    int a;
    int b;
}p;

int main(){
    //p就相当与struct data
    p p1 = {1,2};

    printf("%d\n",p1.a);
    printf("%d",p1.b);
    return 0;
}

2.我们联合

联合和结构体很像,但是数据存储的方式是不相同的,结构体的数据是分开存储的,而联合储存的数据确实存储在一起的,也就是说会发生数据的覆盖

#include<stdio.h>

union data{
    int a;
    int b;
}p;
int main(){
    p.a = 1;
    p.b = 2;
    printf("%d\n",p.a);//输出2
    printf("%x\n",&p.a);//输出地址601044
    printf("%x\n",&p.b);//输出地址601044
    
    return 0;
}

3.全局变量

定义在函数值外的变量,我们称之为全局变量,定义在函数内部的变量,我们称之为本地变量

  • 如果全局变量没有初始化会得到0值
  • 指针会的到NULL值
  • 如果函数内部局部变量与全局变量相同,全局变量会被隐藏
#include<stdio.h>

int a = 12;

int main(){
    printf("%d\n",a);  
    func();
    return 0;
}

void func(void){
    printf("%d",a + 1);
}
//全局变量的隐藏
#include<stdio.h>

int a = 2;

int main(){
    int a = 1;
    printf("%d",a);//输出1
    return 0;
}

4.静静的变量

在本地变量定义时加上static修饰符就称之为静态本地变量

  • 当函数离开时静态本地变量会继续存在并保持其值,全局的生存期,本地的作用域
#include<stdio.h>

int main(){
    func();
    func();
    return 0;
}

void func (void){
    static int a = 1;
    int b = 1;
    a += 1;
    b += 1;
    printf("a = %d\n",a);//生存期很长
    printf("b = %d\n",b);//生存期很短
}

5.返回本地变量的地址

#include<stdio.h>

int* g(void);


int main(){
    int* p = g();
    printf("%d\n",*p);
    printf("%d\n",*p); 
    return 0;
}

int*  g(void){
    int i = 12;
    return &i;
}

我们发现两次输出的结果不一样,这是因为本地变量的生存期结束,我们也不知道,那地方到底存什么,使用全局变量和静态变量的函数的线程是不安全的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值