C语言结构体


引言:
  有时候需要将不同类型的数据组合为一个整体,以便于引用。例如,一名学生有学号、姓名、性别、年龄、地址等属性,如果针对学生的学号、姓名、年龄等都单独定义一个变量,那么在有多名学生时,变量就难以分清。为此,C语言提供结构体来管理不同类型的数据组合。e

一、结构体与结构体指针

 1.1结构体的定义、引用、初始化

声明一个结构体类型的一般形式为

struct 结构体名
	{成员列表};

在C++中可以不用写struct ,在C语言中必须要写Struct关键字。
例如:

struct student
	{
		int number;
		char name[30];
		char sex;
		int age;
		float score;
		char addr[30];
	};

先声明结构体类型,在定义变量名,如

struct student studnet1,student2;

结构体声明最后一定要加分号
整型数据(%d)、浮点型数据(%f)、字符串型数据(%s)都会忽略空格,但是字符型数据(%c)不会忽略空格,所以如果要读取字符型数据,那么就要在待读取的字符数据与其他数据之间加入空格。

 1.2结构体指针

 一个结构体变量的指针就是该变量所占据的内存段的起始地址.可以设置一个指针变量,用它指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。
例:结构体指针的使用

#include <stdio.h>
#include <stdlib.h>

//结构体指针
struct student{
	int num;
	char name[20];
	char sex;
}; 

int main()
{
	struct student s={1001,"wangle",'M'};
	struct student sarr[3]={1001,"lilei",'M',1005,"zhangsan",'M',1007,"lili",'F'};
	struct student *p;		//定义结构体指针
	int num;
	p=&s;
	printf("%d %s %c\n",p->num,p->name,p->sex);
	p=sarr;
	printf("%d %s %c\n"",(*p).num,(*p).name,(*p).sex);//方式一获取成员printf("%d %s %c\n",p->num,p->name,p->sex);//方式二获取成员printf("---------------
	-------------\n");
	num=p->num++;
	printf("num=%d,p->num=%d\n",num,p->num);num=p++->num;
	printf("num=%d,p->num=%d\n",num,p->num);system("pause");
}

 可以看到, p就是一个结构体指针,可以对结构体s取地址并赋给p,这样借助成员选择操作符,就可以通过p访问结构体的每个成员,然后进行打印。我们知道数组名中存储的是数据的首地址,所以可以将sarr赋给p,这样就可以通过两种方式访问对应的成员。
 使用(p).num访问成员为什么要加括号呢?
原因是“.”成员选择的优先级高于“
”(即取值)运算符,所以必须加括号,通过*p得到sarr[0],然后获取对应的成员。

二、typedef的使用

typedef的作用就是起别名。

#include <stdio.h>
#include <stdlib.h>
//结构体指针
//给结构体起别名stu,起了结构体指针别名pstu
typedef struct student{
	int num;
	char name[20];
	char sex;
	}stu,*pstu;
	//stu等价于student  *pstu等价于struct student *
typedef int INTEGER;
int main()
{
	stu s={1001,"wangle",'M'};
	pstu p;
	INTEGER i=10;
	p=&s;
	printf("i=%d,p->num=%d\n",i,p->num);
	system("pause");
}

 使用stu定义结构体变量和使用struct student定义结构体变量是等价的;使用INTEGER定义变量i和使用int定义变量i是等价的; pstu等价于struct student*,所以p是结构体指针变量。

三、C++引用

 对于C++,首先新建源文件时,名字需要叫main.cpp,不能像我们之前那样叫main.c,为什么王道数据结构都是用的C语言语法,但是额外使用了C++的引用呢,原因是很多数据结构都采用了这个做法。

int a;
//把&写到形参的位置是C++的语法,称为引用
void modifynum(int &b)
{
	++b;
}
modifynum(a);//调用


int *p=NULL;
void modify_pointer(int *&p)//引用要和变量挨着
{
	p=q;
}
modify_pointer(p);//调用

 如上面两个例子所示,我们在修改函数外的某一变量时,使用了引用后,在子函数内的操作和函数外操作手法一致,这样编程效率较高,对于初学者理解也非常方便.
 那这种CH+的写法,和C语言的代码又是如何对应的呢?下面我们来看一下代码对应关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值