【C语言连载六】--------变量、修饰词、结构体、枚举、typedef

本文深入探讨C语言中的变量使用,详细解释了修饰词的作用,同时介绍了结构体、枚举和typedef的概念及应用,帮助读者更好地理解和运用这些核心概念。


======变量 修饰词====================

一、变量 & 作用域
     (1)局部变量:----> { }内            ---->  不赋值时,系统默认为随机数;
     (2)全局变量:----> 整个应用程序  ----> 不赋值时,系统默认为0;

二、变量的存储类型//变量存储在哪里(内存、硬件寄存器)
      【1】内存分为:栈区、堆区(程序员)、静态存储区
      【2】根据存储类型,变量可分为:
            自动变量:auto  (局部变量—》存于栈区)
            静态变量:static(可修饰内部函数(静态函数 ),与全局变量生命周期一样)
            寄存器变量:register
三、静态变量
(1)它会保留上一次的值
(2)它的生命周期与应用程序绑定
(3)定义在函数内部 / 外部,不影响其生命周期
(4)存于静态存储区
(5)若写在函数外面,其他的函数也可以使用它;若写在函数里面,只能在对应函数中使用
       静态变量 & 全局变量 & 静态全局变量
静态变量:static修饰的变量,若定义在函数体外,就是静态全局变量
全局变量:定义在函数体外,默认修饰词为extern
静态全局变量:static修饰的全局变量

共同点:生命周期一样,均与应用程序绑定
异同点:作用域不一样
             静态变量若定义在{ }内,则其作用域在{ }内;若定义在函数体外(即静态全局变量),则其作用域在整个当前文件中。
             全局变量作用域在整个应用程序,其他文件也可以调用和访问

四、寄存器变量
(1)register修饰的自动变量
(2)存于硬件寄存器(大小有限)中,访问效率 > 内存
(3)生命周期:{ } 中
(4)只限于int、char、float、double、指针类型的变量使用
五、extern、 static 与函数
外部函数:当前文件中定义,允许其它文件访问、调用———>extern修饰
内部函数:当前文件中定义,不允许其它文件访问、调用———>static修饰
             内部函数被其他文件调用时,编译没有问题,链接时会出错
六、extern、 static 与变量
(1)extern声明一个已经定义过的变量,而非定义一个变量
(2)默认情况下,一个全局变量(外部)是可以供多个源文件共享的,
        (即,多个源文件中,同名的全局变量都代表同一个变量)。
(3)static修饰的全局变量,只能用于当前文件


======结构体、枚举、typedef====================

一、结构体
  结构体定义: struct 结构体名称 {} 变量名;
 
注意:定义结构体结尾一定要加分号
  //
结构体不能够对自身递归使用
 
结构体初始化方法:
  
方法一: struct Student jack = {10, "jack", 1.5, {2011, 5, 5}};
 
方法二: 分别设置各个属性的值
  //    jack.age = 10;
  //    jack.name = "jack";
  //    jack.height = 1.5;
  ->
指针符号
 
给野指针开辟空间 (*name
  jack.name = malloc(sizeof(char)*10);
  释放内存: malloc———delete(jack.name);
二、枚举
  枚举定义: enum 枚举名称 { 元素 1 ,元素 2 ,元素 3} 变量;
  枚举值为数值,从 0 开始,逐次累加;若不想从 0 开始,创建枚举类型的变量,如 enum Weather weather = 1;
三、typedef
  作用:为已知类型定义一个新名
 
如: typedef int Integer;
 
注意与 #define 的区别:
  #define
是前面代替后面,结尾处没有   分号
 
给指针定义新名: typedef char  *string;  string name = “jack”;
 
给结构体定义新名 ( 枚举与其相同 ):
  typedef struct Student _student;
  typedef struct Student {} _student;
  typedef struct {} _student;
7.typedef
与函数指针
 
定义一个指针指向 sum 函数
 Integer (*p)(Integer, Integer) = sum;
  typedef
函数指针返回值 (* 指针名 )( 函数形参 );
 
使用:指针名 p1 = 函数名
 
例如: typedef int (*p)(int a, int b);
             p p1 = sum;
    /*
    
定义一个学生的结构体,成员变量有名字、学籍号、某一学科的成绩。分别从键盘读入两个学生的信息。最后再后台输出谁的成绩好就在公告栏里表彰出来,如果成绩相同,那么就在公告栏中一同显示出来。
     */
struct Student{
    char *name;
   
int xueji;
   
int score;
} stu1, stu2;

int max( int a, int b){
   
return (a > b? a : b);
}

int main( int argc, const char * argv[]) {
   
// 给指针 *name 开辟空间
   
stu1 . name = malloc ( sizeof ( char ) * 10 );
   
stu2 . name = malloc ( sizeof ( char ) * 10 );

   
printf ( " 请输入第一个学生的姓名、学籍号、姓名: " );
   
scanf ( "%s %d %d" , stu1 . name ,& stu1 . xueji ,& stu1 . score );
   
   
printf ( " 请输入第二个学生的姓名、学籍号、姓名: " );
   
scanf ( "%s %d %d" , stu2 . name ,& stu2 . xueji ,& stu2 . score );
   
   
   
if ( stu1 . score > stu2 . score ) {
       
printf ( "%s %d %d \n" , stu1 . name , stu1 . xueji , stu1 . score );
    }
else if ( stu1 . score < stu2 . score ){
       
printf ( "%s %d %d \n" , stu2 . name , stu2 . xueji , stu2 . score );
    }
else if ( stu1 . score == stu2 . score ){
       
printf ( "%s %d %d \n" , stu1 . name , stu1 . xueji , stu1 . score );
       
printf ( "%s %d %d \n" , stu2 . name , stu2 . xueji , stu2 . score );
    }
else {
       
printf ( " " );
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值