c语言中 结构变量,结构类型标示,结构类型定义的区别

本文详细阐述了C语言中结构体变量、结构类型标识符和结构类型定义的区别。通过实例解析,帮助读者理解如何声明、使用和定义结构体,以及它们在编程中的应用。
结构变量,结构类型标示,结构类型定义的区别
+++++++++++++++++++++++++
0:结构变量,每次用的时候都需要重新定义一遍。
//复合类型,结构变量的声明
    struct{
        int pid;
        char name[10];
        int age;
    } p1,p2;

++++++++++++++++++++++++++
1:结构标示,就是给结构起一个名字,
//2.结构类型-结构标示
struct Person{
    int pid;
    char name[10];
    int age;
};//注意这了是有;的符号的
使用的时候struct Person p1;


struct Person{
    int pid;
    char name[10];
    int age;
}p2,p3={1,"hello",3};//注意这了是有;的符号的,而且可以在这里进行初始化和申明


+++++++++++++++++++++++++
2:然后觉得可能还不是很好,那么就结构类型定义,就像java一样的使用了
typedef struct{
        int pid;
        char name[10];
        int age;
    } Customer;
    
    Customer c1;


+++++++++++++++++++++++++++


//
//  main.c
//  StructDemo2
//
//  Created by 千 on 16/7/20.
//  Copyright © 2016年 kodulf. All rights reserved.
//

#include <stdio.h>

//之前讲的是结构变量,现在讲结构标示
//2.结构类型-结构标示
/*
 就有点像是java中的class
 public Class Person{
	int pid;
	String name;
	int age;
 }
 */
struct Person{
    int pid;
    char name[10];
    int age;
}p2,p3={1,"hello",3};//注意这了是有;的符号的,而且可以在这里进行初始化和申明

//结构类型-标记
struct NewPerson{
    int pid;
    char name[10];
    int age;
};
//结构类型作为参数
void printPerson(struct NewPerson p){
    printf("pid=%d\n",p.pid);
    printf("name=%s\n",p.name);
    printf("age=%d\n",p.age);
    printf("+++++++++++\n");
}
//结构类型作为返回值
struct NewPerson getPerson(){
    struct NewPerson p2;
    p2.pid=0;
    strcpy(p2.name,"p2 name");
    p2.age=90;
    return p2;
};
int main(int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    
    struct Person p1;//名称为person的结构体类型
    p1.pid = 1;
    strcpy(p1.name,"hello");//注意这个字符串的肤质不能使用p1.name ="hello";
    p1.age=29;
    
    printf("pid=%d,name=%s,age=%d\n",p1.pid,p1.name,p1.age);
    
    
    //3:改进,成为结构类型定义,通过类型定义的方式,实现和java非常类似的
    
    typedef int BOOL; //这样bool 就代表int类型了
    typedef struct{
        int pid;
        char name[10];
        int age;
    } Customer;
    
    Customer c1;
    c1.pid = 9;
    strcpy(c1.name,"customer");
    c1.age=9;
    
    printf("pid=%d,name=%s,age=%d\n",c1.pid,c1.name,c1.age);
    
    //测试结构类型作为参数和返回值
    struct NewPerson np1;
    np1.pid = 90;
    strcpy(np1.name, "new person");
    np1.age = 29;
    printf("开始输出new person\n");
    printPerson(np1);
    
    //结构体,
    struct NewPerson np2 = getPerson();//结构体是可以直接等号来复制的
    printPerson(np2);
    
    //4.结构体和数组
    struct MyPoint{
        int x;
        int y;
    };//注意了一定不能少了这个分号
    
    struct MyCircle{
        struct MyPoint center;//圆心
        double r;//半径
    };//注意了一定不能少了这个分号
    
    struct MyPoint mp ;
    mp.x=10;
    mp.y=10;
    
    struct MyCircle circle;
    circle.center=mp;
    circle.r=1.2f;
    printf("圆心的坐标是x=%d,y=%d,r=%f\n",circle.center.x,circle.center.y,circle.r);
    
    //结构类型和数组
    //首先结构体里面可以有数组,
    struct StructDemo{
        int pid;
        char name[10];
        int age;
    };
    //数组的类型也可以是结构体类型的
    struct NewPerson persons[4];
    struct NewPerson person1,person2,person3,person4;
    
    person1.age=1;
    strcpy(person1.name, "person1");
    person1.pid = 1;
    persons[0]=person1;
    
    person2.age=2;
    strcpy(person2.name, "person2");
    person2.pid = 2;
    persons[1]=person2;
    
    person3.age=3;
    strcpy(person3.name, "person3");
    person3.pid = 3;
    persons[2]=person3;
    
    person4.age=4;
    strcpy(person4.name, "person4");
    person4.pid = 4;
    persons[3]=person4;
    
    for(int i=0;i<4;i++){
        printPerson(persons[i]);
    }
    
    
    return 0;
}



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值