C程序范例(3)——结构体

一、结构体类型定义。

结构体类型和数组类型一样,需要由程序员定义,必须限定以后使用。

struct 类型标识符
{
          类型名 成员名;
          类型名 成员名;
          ...
};

其中,struct 是结构体类型定义的关键字,他与其后用户指定的类型标识符共同组成结构体类型名。例如学生结构体类型定义如下:

struct st_type
{
  char num[7];
  char name[20];
  char sex;
  int age;
  float score;
  char address[30];
};

说明:(1)定义结构体类型只是规定了这种数据类型的模型,在编译时并不赋给他存储空间,所以绝对不允许对定义的结构体类型进行存取数据的操作。

(2)结构体成员可以是简单变量、数组或是另一个结构体变量。例如:

struct d_type
{
  int year;
  int minth;
  int day;
};
struct s_type
{
  char num[7];
  char name[21];
  char sex;
  struct d_type birthday;
  float score;
  char address[41];
};

(3)结构体成员名可以与程序中其他变量名同名,系统会自动识别它,不会混淆。

(4)结构体类型定义可以放在函数外部(全局有效),放在函数内部(只在本函数内部有用)

二、结构体变量。

1、结构体变量的定义。

(1)一般形式定义。

struct 标识符
{
  结构体成员表;
};
struct 标识符 结构体变量;

(2)在定义类型的同时,定义变量。

struct 标识符
{
  结构体成员表;
}结构体变量名表;

2、结构体变量的初始化。

注意:初始化个数不得超过成员数,若小于成员数,则剩余成员将被初始化为默认值。

3、结构体变量的引用。

对结构体变量整体的引用限制较大,只能对他进行一部分操作。

(1)可作为函数的形参,实参或是函数返回值等进行函数的数据传递。

(2)可以整体赋值,但是赋值号左边必须是结构体变量,右边必须的是同一种结构体类型的结构体变量或函数返回值,如:student1=student2;

(3)结构体变量成员的引用。

结构体变量名.成员名

三、结构体数组。(相同类型的结构体做元素就可以构成结构体数组,其中,每个元素内部含有不同类型的成员)

1、结构体数组定义类型。

struct st_type

{

int year;

int month;

int day;

};struct st_type s[3];//定义了一个结构体数组s,他有三个元素,数组中的各元素在内存中是连续存放的。

2、结构体数组初始化。

结构体数组在定义中也可以同时初始化。

结构体类型名 结构体数组名【数组长度】

3、用结构体数组存储学生信息,每个学生有姓名,学号,成绩。

#define N4

#include “stdio.h”

struct {int num;char name[11]; int score;}t,s[N];

main(){int i,j,k;print("请输入第一个学生的学号:");

scanf("%d",&k);}

四、结构体和函数。

1、结构体作函数参数。

结构体成员,可以作为函数实参,形参为与该成员同类型的变量。

void printf(struct st_type s)

{printf("输出: 姓名 性别 年龄 成绩");printf("%s%s%c",s.name,...)}

2、返回值为结构体类型的函数。

结构体类型名 函数名 (形参表)

3、typedef语句。

typedef语句可以为系统已经定义的简单类型(如int double float 等)另起一个名称。也可以为自己定义的结构体枚举等类型另起一个名称。

typedef 类型名 新类型名

如:typedef int INTEGER;就是将int类型名修改为INTEGER

使用typedef语句的优点:(1)可以缩写长的类型定义,使用便于理解的数据类型名,使程序简洁,可读性强。

(2)可将程序参数化,便于移植。

时间: 2024-10-27 04:27:35

C程序范例(3)——结构体的相关文章

【黑马程序员】————结构体

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.什么是结构体 数组:只能由多个相同类型的数据构成 结构体:可以由多个不同类型的数据构成 二.结构体的定义 1.定义形式 结构体内部的元素,也就是组成成分,我们一般称为"成员". 结构体的一般定义形式为: 1 struct 结构体名{ //struct是关键字,是结构体类型的标志 2 3 类型名1 成员名1; 4 5 类型名2 成员名2; 6 7 …… 8 9 类型名n 成员名n;

黑马程序员-关于结构体

------- IOS培训.android培训.java培训.期待与您交流! ---------- 1 结构体: 作用:可以由多个不同类型的数据构成. //定义结构体类型,类型为person:(此阶段不会分配存储空间 1 struct person 2 { 3 变量; // 称为结构体变量或属性 4 } 5 //根据结构体类型person,定义结构体变量,变量名为p(此阶段分配存储空间) 6 struct person p={ }; // 赋值的时候只能在定义结构体的时候同时赋值 错误写法 st

《黑马程序员》 结构体struct (C语言)

一.结构体的基本概念 ●     数   组:只能由多个相同类型的数据组成 ●     结构体:可以由多种不同类型的数据组成 代码练习: #include <stdio.h> int main() { // 1.定义结构体类型 struct person (并不会分配存储空间) struct person { int age; double height; char *name; }; //2.根据结构体类型,定义结构体变量 (真正分配存储空间)struct person p ={20,1.5

黑马程序员___Foundation__结构体

结构体 NSRange: 用来表示范围 创建 NSRange r1 = {2, 4} NSRange r2 = {.location = 2, .length = 4} NSRange r3 = NSMakeRange(2, 4) 查找某个字符串在str中的范围 NSString *str = @"i love oc"; NSRange range = [str rangeOfString:@"java"] NSLog(@"location = %ld,

结构体,公用体,枚举类型的sizeof

1)枚举类enum型空间计算 enum只是定义了一个常量集合,里面没有“元素”,而枚举类型是当做int来存储的,所以枚举类型的sizeof值都为4 1 enum color(red,pink,white,black)c; 2 void main() 3 { 4 cout<<sizeof(enum); //值为4 5 } 2)公用体union空间计算 公用体中的成员公用同一段内存,所以整个联合体的sizeof是所有成员中占用内存最大的成员的sizeof,联合体要考虑内存对齐,具体规则下面会讲 1

C语言之结构体(2)

无意侵权:http://www.cnblogs.com/zhouxuanyu/p/4514754.html 再识C中的结构体 在前面认识C中的结构体中我介绍了结构体的基础知识,下面通过这段代码来回顾一下: 1 #include<stdio.h> 2 #define LEN 20 3 4 struct Student{ //定义结构体 5 char name[LEN]; 6 char address[LEN]; 7 int age; 8 }; 9 10 int main(int argc, ch

(struct)结构体变量作为函数参数调用的方法小结

结构体变量.结构指针变量.结构数组作为函数的参数应用实例分析 struct stud { long int num; float score; }; /*结构体变量作为函数的参数,修改之后的成员值不能返回到主调函数*/ void funvr(struct stud t) { t.num=2000101; t.score=71.0; } /*结构体数组作为函数的参数,修改后的元素的成员值能返回到主调函数*/ void funar(struct stud t[]) //void funar(stru

C++ 结构体深入理解

1. 结构体基础知识 有时需要将不同类型的数据组合成一个有机的整体,以供用户方便地使用.这些组合在一个整体中的数据是互相联系的.例如,一个学生的学号.姓名.性别.年龄.成绩.家庭地址等项,都是这个学生的属性,见图7.1. 图 7.1 可以看到学号(num).姓名(name).性别(sex).年龄(age).成绩(score ).地址(addr)是与姓名为“Li Fun”的学生有关的.如果在程序中将num,name,sex,age,score,addr分别定义为互相独立的变量,就难以反映出它们之间

[转]C语言指针 之 结构体指针

在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型.创建结构体指针是极常见的.下面是一个例子: 1 typedef struct 2 { 3 char name[21]; 4 char city[21]; 5 char state[3]; 6 } Rec; 7 typedef Rec *RecPointer; 8 9 RecPointer r; 10 r=(RecPointer)malloc(sizeof(Rec)); r是一个指向结构体的指针.请注意,因为r是一个指针,所以像其他指

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

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