C语言学习--结构体

结构体定义三种方式:

      1 #include<stdio.h>
      2 //第一种定义方法
      3 struct point {
      4         int x;
      5         int y;
      6 };
      7 struct point p1,p2;
      8
      9 //第二种定义方法
     10 struct {
     11         int x;
     12         int y;
     13 } p1,p2;
     14
     15 //第三种定义方法
     16 struct {
     17         int x;
     18         int y;
     19 } p1,p2;

这三种方法,对于第一和第三种,都声明了结构point。但是第二种没有,只声明了两个变量。

下面的小例子,说明结构类型的两种初始化方法。

      1 #include<stdio.h>
      2 struct date {
      3         int month;
      4         int day;
      5         int year;
      6 };
      7 int main()
      8 {
      9         struct date today = {2,18,2015};    //结构的初始化,方法1;同数组初始化。
     10         struct date thismonth = {.month = 3,.year = 2015};    //结构的初始化,方法2;指定对应的结构成员初始化。
     11         printf("Todays date is %i-%i-%i\n",today.day,today.month,today.year)
     12         printf("This month date is %i-%i-%i\n",thismonth.month = 2,thismonth.year = 2015}
     13         return 0;
     14 };

结构成员:

  结构和数组有点像,访问方法不同。数组是【】访问里面的元素;结构是用.来访问结构成员。

结构运算:

  要访问整个结构,可以直接访问结构变量的名字。

  对于整个结构可以赋值,取地址,可以传递给函数。

  p1 = struct point{5,10};  //相当于p1.x = 5,p1.y = 10

  p1  = p2;

结构指针:

  结构和数组不一样,数组是指针,可以直接取地址。对结构成员取地址,必须用&。

  struct date *pdate = &today;

结构作为参数函数:

  int numofdays(struct date d);

  整个结构可以作为参数的值传入函数。

  这个时候是在函数内部新建一个结构变量,并且赋值调用者结构的值。

  也可以返回一个结构。和数组不同。

输入结构:

  scanf函数只能读入一个变量。怎么读入一个结构呢?

  可以调用一个函数来实现。注意:C语言的函数调用是传值的。

  所以在函数中的结构变量p和main函数中的结构变量p是不同的。  

  在函数读入p之后没有任何值返回给main,所以主函数结构值不变。

解决方案:

  在函数内部创建一个临时的结构变量p,返回一个结构变量。

指向结构的指针:  

      1 #include<stdio.h>
      2 struct date {
      3         int month;
      4         int day;
      5         int year;
      6 } myday;
      7
      8 struct date *p = &myday;
      9
     10 (*p).month = 12;
     11 p->month = 12;

用->表示指针所指结构变量中成员。

  

时间: 2024-08-10 12:05:20

C语言学习--结构体的相关文章

ios开发中的C语言学习—— 结构体简介

在开发过程中,经常会需要处理一组不同类型的数据,比如学生的个人信息,由姓名.年龄.性别.身高等组成,因为这些数据是由不同数据类型组成的,因此不能用数组表示,对于不同数据类型的一组数据,可以采用结构体来进行存储.当然,对于面向对象的语言来说,最好是用类来表示,但是C语言是面向过程的,因此选择用结构体来表示. 一.结构体的定义 struct 结构体名{ 类型名 成员名1; 类型名 成员名2; ... ... 类型名 成员名n; }; 二.结构体的变量声明 1.先定义结构体类型,再定义变量 代码 //

黑 马 程 序 员_视频学习总结&lt;C语言&gt;----05 结构体

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.什么是结构体 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型.为此,C语言专门提供了一种构造类型来解决上述问题,这就是结构体,它允许内部的元素是不同类型的. 二.结构体的定义 结构体内部的元素,也就是

【剑仙教程】易语言的结构体。自定义数据类型。

1楼. [剑仙教程]易语言的结构体.自定义数据类型. 在易语言中,有基本数据类型,自定义数据类型. 自定义数据类型,在C语言/C++中称为结构体.这是面向对象和类的编程. . . 先上代码.打开易语言的IDE,IDE,是开发环境. 点击“插入”菜单,选择“数据类型” 这时,代码编辑框就会增加一个数据类型的窗口. 把“数据类型1”命名为“精易_座标”,勾选“公开项”. 这样,一个 精易_座标 的类就做好了. . 再按回车键,给这个类增加2个成员. x 整数型 y 整数型 . 访问时,直接写代码就O

黑马程序员---C语言基础---结构体

------iOS培训.Java培训.Android培训, iOS学习型技术博客,期待与您交流------ C语言基础---结构体 一.什么是结构体 介绍结构体之前,我想先简单介绍下数组.我想大家对数组都再熟悉不过了,顾名思义,数组就是将一些数据(元素)组合在一起,作为一个整体.使用数组需要注意的是这些元素必须是相同类型.而结构体和数组类似,也是将一些数据组合在一起作为一个整体,但是这些元素可以是不同类型.可以这么理解:结构体是更加灵活的数组,因为它允许元素是不同的类型. 实际生活中,如果我们要

C语言的结构体和C++结构体的区别

关于C++中声明结构体中需要使用构造器创建实例对象的语法: 接着上两个代码截图你就初步体会到C语言的结构体和C++结构体的区别了:     对于右边的C++结构体的使用类似Java,C++,Swift中的类,类中有构造器方法,然后构造器创建这个类的实例对象. 当然Swift中也有一样用法的结构体.毕竟Swfit是集大家之所成的现代语言.

c语言的结构体字节数统计

struct结构体的字节数 等于 结构体中最大类型的字节数的倍数. 如:?typedef struct Student{??? short id; //2个字节??? char name[15]; //1*15个字节??? int age; //4个字节??? char num; //1个字节} Student; 总共28个字节. c语言的结构体字节数统计

C语言的结构体和 C++结构体的区别

 C语言的结构体和 C++结构体的区别 关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的初始化方法> 接着下面两个代码截图(一个是C源码,一个是C++源码)对比你就初步体会到C语言的结构体和C++结构体的区别了:      对于右边的C++结构体的使用类似Java,C++,Swift中的类,类中有构造器方法,然后构造器创建这个类的实例对象. 当然Sw

C语言之结构体

1 概述 结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型. 2 定义结构体类型变量的方法 定义结构体变量的一般格式为: struct 结构名 { 类型  变量名; 类型  变量名: ... }结构变量; 代码如下: struct Student{         char name[8];         int age;     }stu1; 上面的代码声明了一个名为Student的结构体,它包含两个成员name和age,成员name的数据类型为字符数组,成员ag

C语言中结构体赋值问题的讨论(转载)

今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言中结构体赋值的问题吧: 结构体直接赋值的实现 下面是一个实例: #include <stdio.h> struct Foo { char a; int b; double c; }foo1, foo2; //define two structs with three different field