结构体的说明(构造类型)

数组:只能由多个相同类型的数据构成

结构体:可以由多个不同类型的数据构成 ,结构体的类型是不存在的,自己定义

int main()
{
// 1.定义结构体类型 定义类型的时候是没有分配内存的
struct Person
{ // 里面的3个变量,可以称为是结构体的成员或者属性
int age; // 年龄
double height; // 身高
char *name; // 姓名
}; //注意分号 // 1.定义结构体类型
struct Person p = {, 1.55, "jack"};
p.age = ;
p.name = "rose"; printf("age=%d, name=%s, height=%f\n", p.age, p.name, p.height); /* 错误写法
struct Person p2;
p2 = {30, 1.67, "jake"};
*/ struct Person p2 = {.height = 1.78, .name="jim", .age=};
//p2.age = 25; return ;
}
.定义结构体变量的3种方式
> 先定义类型,再定义变量(分开定义)
struct Student
{
int age;
};
struct Student stu; > 定义类型的同时定义变量
struct Student
{
int age;
} stu;
struct Student stu2; > 定义类型的同时定义变量(省略了类型名称)//无法重用
struct
{
int age;
} stu;

结构体数组


int main()
{
struct RankRecord
{
int no; // 序号 4
char *name; // 名称 8
int score; // 积分 4 };
/*
struct RankRecord r1 = {1, "jack", 5000};
struct RankRecord r2 = {2, "jim", 500};
struct RankRecord r3 = {3, "jake",300};
*/
struct RankRecord records[3] =
{
{1, "jack", 5000}, {2, "jim", 500}, {3, "jake",300}
};
for (int i = 0; i<3; i++)
{
printf("%d\t%s\t%d\n", records[i].no, records[i].name, records[i].score);
} return 0;
}

 指向结构体的指针

#include <stdio.h>

/*
1.指向结构体的指针的定义
struct Student *p; 2.利用指针访问结构体的成员
1> (*p).成员名称
2> p->成员名称 */ int main()
{
struct Student
{
int no;
int age;
};
// 结构体变量
struct Student stu = {, }; // 指针变量p将来指向struct Student类型的数据
struct Student *p; // 指针变量p指向了stu变量
p = &stu; p->age = ; // 第一种方式
printf("age=%d, no=%d\n", stu.age, stu.no); // 第二种方式
printf("age=%d, no=%d\n", (*p).age, (*p).no); // 第三种方式 是比较常用的
printf("age=%d, no=%d\n", p->age, p->no); return ;
}

结构体和函数

#include <stdio.h>
struct Student
{
int age;
int no;
}; // 如果结构体作为函数参数,只是将实参结构体所有成员的值对应地赋值给了形参结构体的所有成员
// 修改函数内部结构体的成员不会影响外面的实参结构体
void test(struct Student s)
{
s.age = ;
s.no = ;
} // 会影响外面的实参结构体
void test2(struct Student *p)
{
p->age = ;
p->no = ; } void test3(struct Student *p)
{
struct Student stu2 = {, };
p = &stu2;
p->age = ;
p->no = ;
} int main()
{
struct Student stu = {, }; //test(stu);
//test2(&stu);
test3(&stu); printf("age=%d, no=%d\n", stu.age, stu.no); return ;
}

结构体的嵌套定义

#include <stdio.h>

int main()
{
struct Date
{
int year;
int month;
int day;
}; // 类型
struct Student
{
int no; // 学号 struct Date birthday; // 生日 struct Date ruxueDate; // 入学日期 // 这种写法是错误的
//struct Student stu;
};
struct Student stu = {, {, , }, {, , }}; printf("year=%d,month=%d,day=%d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day); return ;
}

枚举

#include <stdio.h>

int main()
{
enum Sex { Man, Woman, Unkown}; // 0男 1女 -1不详
//int sex = 3;
//enum Sex s = Unkown; // 1.定义枚举类型
enum Season
{
spring = ,
summer, //枚举中的值其实都是整型的常量 从0开始 也可以自定义开始值
autumn,
winter
}; // 2.定义枚举变量
enum Season s = ; //c语言是弱类型语言,枚举不正确的值不会报错 printf("%d\n", s); //输出的是整型常量 return ;
}

C语言-06复杂数据类型-04 结构体的更多相关文章

  1. 如何系统学习C 语言(中)之 结构体篇

    1,结构体 在前面我们知道变量和数组都可以用来存储数据,变量用来存储单个数据,数组可以用来存储一组同类型的数据,但你有没有发现--它们都只适合单一属性的数据.那现实生活中,很多对象都是具有多属性的.例 ...

  2. 智能合约语言 Solidity 教程系列6 - 结构体与映射

    写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 本系列文章一部分是参考Solidity官方文档(当前最新版 ...

  3. Go语言学习笔记十: 结构体

    Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...

  4. 编程C语言进阶篇——自定义数据类型:结构体

    一.结构体 定义方法: 结构名 变量名 特点: 两个同类型的结构变量可以相互赋值,但是结构变量之间不能使用"<","=="等运算符,如果使用则需要对运算符 ...

  5. C语言中的系统时间结构体类型

    在C语言涉及中经常需要定时触发事件,涉及到获取系统时间,其结构体类型有多种.Unix/Linux系统下有以下几种时间结构: 1.time_t 类型:长整型,一般用来表示从1970-01-01 00:0 ...

  6. C语言入门(15)——结构体与数据抽象

    大多数的计算机运算是对现实世界的模拟,如果想用计算机来模拟现实世界需要用到数据抽象的方法.所谓抽象是从实际的人.物.事和概念中抽取所关心的共同特征,,忽略非本质的细节,吧这些特征用各种概念精确的加以描 ...

  7. C语言入门(14)——结构体

    整数.字符.布尔值.浮点数这些数据类型都具有单一的值,这些可称为基本数据类型.但字符串是一个例外,它由很多字符组成,像这种由基本类型组成的数据类型称为复合数据类型,正如表达式和语句有组合规则一样,由基 ...

  8. C语言中内存对齐与结构体

    结构体 结构体是一种新的数据类型,对C语言的数据类型进行了极大的扩充. struct STU{ int age; char name[15]; }; struct STU a; //结构体实例 str ...

  9. c语言_文件操作_FILE结构体解释_涉及对操作系统文件FCB操作的解释_

    1. 文件和流的关系 C将每个文件简单地作为顺序字节流(如下图).每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中.当打开文件时,就建立了和文件 ...

随机推荐

  1. Objective C 代码片段(类别)

    @interface NSString (reverse) -(NSString *) reverseString; @end @implementation NSString (reverse) - ...

  2. Redis学习手册(开篇)

    一.简介: 在过去的几年中,NoSQL数据库一度成为高并发.海量数据存储解决方案的代名词,与之相应的产品也呈现出雨后春笋般的生机.然而在众多产品中能够脱颖而出的却屈指可数,如Redis.MongoDB ...

  3. arcgis通过 Python 使用工具 获得结果信息

    通过 Python 使用工具 ArcGIS 10 每个地理处理工具都具有一组固定的参数,这些参数为工具提供执行所需的信息.工具通常具有定义一个或多个数据集的输入参数,这些数据集一般用于生成新的输出数据 ...

  4. ERROR 1114 (HY000): The table 'adv_date_tmp' is full(Mysql临时表应用)

    场景:需要对现在数据库的数据进行批量的进行is_del=1的操作,但是遇到一个问题,在执行sql的时候发现sql不能在查询特定表的时候再嵌套查询来做update的操作,经过讨论,后续我们想到用临时表的 ...

  5. struts2拦截器的实现原理

    拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理.同时,拦截器也可以让你将通用的 ...

  6. C#的语句

    什么是语句?语句可以是以分号结尾的单行代码,或者是语句块中的一系列单行语句.语句块括在括号 {} 中,并且可以包含嵌套块. 1,语句的类型 (1)声明语句 声明语句主要是引入新的变量和常量.变量的声明 ...

  7. JS调用PHP 和 PHP调用JS的方法举例

    http://my.oschina.net/jiangchike/blog/220988 1.JS方式调用PHP文件并取得PHP中的值举一个简单的例子来说明:如在页面test_json1中用下面这句调 ...

  8. word公式图片显示不全的问题

    最近处理文档遇到比较棘手的问题,就是单行显示的公式和图片都显示不全,高度撑不起来,会被其他行的内容遮挡. 图片估计是对齐方式照成的,公式调了很久也没有办法.最后找了一个临时折衷的办法: 插入表格,然后 ...

  9. OC加强-day05

    #program mark - 0_11 NSRange结构体介绍 [掌握] 是Foundation框架中的一个结构体 NSRange 定义的一个变量的两个属性 location:起始下标 lengt ...

  10. UITextField文本字段控件的位置

    如果需要更改默认的UITextField清除按钮.左右视图等等控件的位置,可以通过如下设置: // 控制清除按钮的位置 (默认 width = 15 = height) -(CGRect)clearB ...