• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C语言-结构体定义

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

typedef struct person {int val, int val1} sperson;  来定义结构体

/*
结构体演示
*/ 
#include <stdio.h>
/*
struct person {
    //以下是三个成员变量声明语句 
    //每个成员变量代表结构体类型的一个子存储区 
    //成员变量声明语句不会分配内存,
    //所以不可以进行初始化 
    int age; 
    float height; 
    char name[10]; 
}; //结构体声明语句 
typedef struct person sperson; //给结构体类型起别名 
*/ 
typedef struct person/*这个时候可以省略结构体本身的名称*/{ 
    int age; 
    float height; 
    char name[10]; 
} sperson; 
int main() { 
    struct person prsn = {20, 1.78f, "abc"}; //结构体变量声明  
    sperson prsn1 = {0}; //结构体变量声明语句
    
    sperson *p_person = NULL;  //结构体指针 
    printf("年龄是%d\n", prsn.age/*prsn的age成员变量代表的子存储区*/);  
    printf("身高是%g\n", prsn.height/*prsn的height成员变量代表的子存储区*/); 
    printf("姓名是%s\n", prsn.name/*prsn的name成员变量代表的子存储区*/);
    p_person = &prsn;  //结构体指针指向存储区 
    printf("年龄是%d\n", p_person->age/*prsn的age成员变量代表的子存储区*/); 
    printf("身高是%g\n", p_person->height/*prsn的height成员变量代表的子存储区*/); 
    printf("姓名是%s\n", p_person->name/*prsn的name成员变量代表的子存储区*/); 
    prsn1 = prsn; //同类型结构体变量之间可以直接赋值 
    //prsn1里的数据都来自于prsn  
    printf("年龄是%d\n", prsn1.age); 
    printf("身高是%g\n", prsn1.height); 
    printf("姓名是%s\n", prsn1.name); 
    return 0; 
} 

在一个结构体里面使用另外一个结构体

/*
结构体演示
*/ 
#include <stdio.h>
typedef struct {
    int row;  //记录点的行号
    int col;  //记录点的列号 
} pt;  //记录点位置的结构体 
typedef struct {
    //两个成员变量记录相对的两个点的位置  
    pt pt1; 
    pt pt2; 
} rect;  //记录水平长方形位置的结构体 
int main() { 
    int area = 0; 
    rect r = {0};   //记录水平长方形的位置 
    pt mid = {0}; //记录中心点的位置 
    rect *p_rect = &r; //指向r存储区的位置 
    pt *p_mid = &mid; //指向mid变量存储区的指针
# if  0 
    printf("请用户输入水平长方形的位置:"); 
    scanf("%d%d%d%d", &(r.pt1.row), &(r.pt1.col), &(r.pt2.row), &(r.pt2.col)); //把用户输入的四个记录在r的四个整数类型子存储区里 
    area = (r.pt1.row - r.pt2.row)/*两个点的行号相减得到长或者宽*/ * (r.pt1.col - r.pt2.col); /*两个点的列号相减得到长或者宽*/  //用长乘以宽得到长方形的面积 
    area = area >= 0 ? area : 0 - area;
    mid.row = (r.pt1.row + r.pt2.row) / 2; //得到中心点的行号并记录到mid变量的存储区里 
    mid.col = (r.pt1.col + r.pt2.col) / 2; //得到中心点的列号并记录到mid变量的存储区里  
    printf("面积是%d\n", area);
    printf("中心点的行是%d, 中心点的列是%d\n", mid.row, mid.col);
 
#endif  
    printf("请用户输入水平长方形的位置:"); 
    scanf("%d%d%d%d", &(p_rect->pt1.row), &(p_rect->pt1.col), &(p_rect->pt2.row), &(p_rect->pt2.col)); 
    printf("%d\n", p_rect->pt1.row);
    area = (p_rect->pt1.row - p_rect->pt2.row) *(p_rect->pt1.col - p_rect->pt2.col); 
    area = area >= 0 ? area : 0 - area;
    printf("面积是%d\n", area); 
    p_mid->row = (p_rect->pt1.row + p_rect->pt2.row) / 2; 
    p_mid->col = (p_rect->pt1.col + p_rect->pt2.col) / 2; 
    printf("中心点的位置是(%d %d)\n", p_mid->col, p_mid->row); 
    return 0; 
}

 3.结构体大小演示,不足四个字节,也填充为4个字节

/*
结构体大小演示
*/
#include <stdio.h>
typedef struct { 
    char buf[2]; 
    int val; 
} tmp; 
typedef struct { 
    char ch;  
    char ch1; 
    int val;
} temp1; 
int main() {
    printf("sizeof(tmp)是%d\n", sizeof(tmp)); 
    printf("sizeif(tmp)是%d\n", sizeof(temp1)); 
    return 0; 
} 

定义结构体的返回值

/*
结构体演示
*/
#include <stdio.h>
typedef struct {
    int row;
    int col; 
} pt; 
pt * read(void) {
    static pt p_t = {0};
    printf("请输入长和宽:"); 
    scanf("%d%d", &p_t.row, &p_t.col); 
    return &p_t;     
}
void print(pt *p_pt) {
    printf("输入的长是%d, 输入的宽是%d\n", p_pt->row, p_pt->col); 
}
int main() {
    pt *p_r = read(); 
    print(p_r); 
    return 0; 
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# 多线程同步和线程通信发布时间:2022-07-13
下一篇:
温故而知新C#分支与循环发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap