第14章内容总结

结构和其他数据形式

1.结构的样子:

struct student{
     char name[20];
     char number[20];
     int n;
     double value;
};
int main()
{
	struct student p1,p2;
	...
	return 0;
}
  • 结构体的声明
      结构体是由关键字struct 来声明的,它就像是一个模板,里面封装了相应的数据。
  • 访问结构成员
      其中p1、p2都是point里面有name[ ]、number[ ]、n、value的值。
    用变量访问结构成员,用.来调用。如:p1.n、p2.value、p1.name[ i ]等。
  • 还可以声明结构数组
struct student{
    char name1[25],name4[25],name3[25],name2[25];
};

int main()
{   
	struct student a[100];
	for(int i=0; i<10; i++){
		scanf("%s %s %s",a[i].name1,a[i].name2,a[i].name3);
	}
	for(int i=10-1; i>=0; i--){
		printf("%s %s %s\n",a[i].name1,a[i].name2,a[i].name3);
	}      //逆序输出
	return 0;
}

输入样例: zhangsan haha 01
      lisi haha 02
      wangwu haha 03

输出样例: wangwu haha 03
      lisi haha 02
      zhangsan haha 01

2.结构指针:

声明和初始化结构指针:

#include <stdio.h>
struct names {
	char first[100];
	char last[100];
};
struct guy {
	struct names handle;  //嵌套结构:结构中包含了另一个结构
	char favfood[100];
	char job[100];
	float income;
};
int main()
{
	struct guy fellow[2] = {
		{{"Ewen", "Villard" },
		"grilled salmon",
		"personality coach",
		68112.00
		},
		{{ "Rodney", "Swillbelly" },
		"tripe",
		"tabloid editor",
		432400.00
		}
	};
	struct guy *him;   //指向结构的指针
	printf("adress #1: %p #2: %p\n",&fellow[0], &fellow[1]);
	him = &fellow[0];  //告诉编译器该指针指向何处
	printf("pointer #1: %p #2: %p\n",him, him + 1);
	printf("him->income is $%.2f: (*him).income is $%.2f\n",
			him->income, (*him).income);
	him++;              //指向下一个结构
	printf("him->favfood is %s: him->handle.last is %s\n",
			him->favfood, him->handle.last);
	return 0;
	}

该程序的输出结构如下:

adress #1: 0x7fff5fbff820 #2: 0x7fff5fbff874
pointer #1: 0x7fff5fbff820 #2: 0x7fff5fbff874
"him->income is $68112.00: (*him).income is $68112.00
him->favfood is tripe: him->handle.last is Swillbelly

	struct guy *him;

  首先是关键字struct,其次是结构标记guy,然后是一个星号‘ * ’,其后跟着指针名。这个语法和其他指针声明一样。
  该声明并未创建一个新的结构,但是指针him现在可以指向任意现有的guy类型的结构。例如,如果barney是guy类型的结构变量,可以这样写:

	him = &barney; 

  和数组不同的是,结构变量名并不是结构变量的地址,因此要在结构变量名前面加上&运算符。
  在本例中,fellow是一个结构数组,这意味着fellow[0]是一个结构。所以,要让him指向fellow[0],可以这么写:

	him = &fellow[0];

多说无益,通过这道题可以充分理解结构体指针联系函数的运用: https://pintia.cn/problem-sets/1337734387166953472/problems/1337735292742037504.

3.链式结构

  结构的一个重要用途就是创建新的数据形式。有很多的一些数据结构可以更有效的解决一些特定的问题,数据结构如:队列、二叉树、堆、哈希表、图标。很多数据结构都是链式结构,即每个结构都包含一两个数据项和一两个指向同类型结构的指针。

4.枚举类型

  可以用枚举类型声明符号类型来表示整型常量。用关键字enum,enum常量是int类型的。枚举类型的用途是在某些时候提高程序的可读性。

	enum spectrum {red, orange, yellow, green, blue, violet};
	enum spectrum color;

实际上red、orange都是int类型的常量,red=0,后面的都逐个递增。
也可以为枚举常量指定整数值。

	enum levels{low=100, medium=500, high= 2000};

5.typedef 简介

  typedef用于为某一特定类型定义别名。用法很简单。

	typedef unsigned char BYTE;

  可以用typedef来为结构命名,此时可以省略结构标签:

	typedef struct {
		float imag;
		float real;
	} COMPLEX;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值