结构类型

一、放置位置 

定义结构类型可以放在函数外也可以放在函数内

放在函数内只有本函数可以使用其他函数无法使用

一般情况下将其放置在函数体外

放在函数体外正整个程序都可以调用

二、声明结构类型的三种方式 
1、 

struct date{
    int month;
    int day;
    int year;
};
    struct date today1,today2;

 表示today1,today2都是date结构类型,里面都有 int month; int day; int year;三个变量  
2、

 struct {
    int month;
    int day;
    int year;
} today1,today;

 表示today1,today2都是无名结构类型,里面都有 int month; int day; int year;三个变量   
3、 

struct date{
    int month;
    int day;
    int year;
} today1,today2;

表示today1,today2都是date结构类型,里面都有 int month; int day; int year;三个变量 

#include <stdio.h>

struct date{
	int month;
	int day;
	int year;
};//定义一个date结构类型,date类型里面包含三个int类型的数据 

int main(){
	struct date today;//定义一个date结构类型的变量today 

	today.month=03;
	today.day=28;
	today.year=2024; 
	printf("今天是%i-%i-%i.\n",
	today.year,today.month,today.day);
	return 0;
}

 

 三、结构类型初始化

方法一:按照定义的变量顺序给变量today里面的三个元素赋初值 

方法二、指定赋值可以不按顺序,未赋值的元素自动为0

#include <stdio.h>

struct date{
	int month;
	int day;
	int year;
};

int main(){
	
	struct date today1={03,28,2024};
//方法一:按照定义的变量顺序给变量today里面的三个元素赋初值 

	struct date today2={.month=03,.year=2024};
//方法二、指定赋值可以不按顺序,未赋值的元素自动为0
 
	printf("今天是%i-%i-%i.\n",
	today1.year,today1.month,today1.day);
	
	printf("今天是%i-%i-%i.\n",
	today2.year,today2.month,today2.day);
	return 0;
}

                

 四、结构和数组的区别

1、访问 
 数组
        int word[a,b,c,d,e,]
        采用数组名+下标访问成员word[0]=a 

结构
        struct word[int a,int b,int c,]
        采用运算符"."+结构变量名称访问元成员
        word.a=a 

2、指针
  数组
         char *p=word;指向数组的指针可以不用取地址符  
  结构
          指向结构的指针必须使用取地址符
          struct date *p=&word; 

五、数据结构运算

         结构不止可以取地址、传递给函数参数,还可以整体参与运算,整体相互赋值 
         date today1={03,28,2024};
         date today2={04,29,2025};
         date today1=date today2是将today2整体赋值给today1
         此时 date today1={04,29,2025};
 
         强制转换赋值
         today3= (struct date){05,30,2025}
         将{}里面的值强制转换为 struct date类型赋值给today3 
 

 #include <stdio.h>

struct date{
    int month;
    int day;
    int year;
};

int main(){
    
    struct date today;

    today=(struct date){03,28,2024};//强制转换赋值
     
    struct date day;
    struct date *p=&today;

    day=today;//整体赋值 

    day.year=2025;//单一成员修改 

    printf("今天是%i-%i-%i.\n",
    today.year,today.month,today.day);
    
    printf("今天是%i-%i-%i.\n",
    day.year,day.month,day.day);
    
    printf("指向today的指针p=%p\n",p);
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值