ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++学习笔记:struct结构体

2021-01-19 09:01:58  阅读:138  来源: 互联网

标签:struct 访问 int age 笔记 stu C++ 数组 结构


C++学习笔记:struct结构体

1.结构体概述

C++语言中的2种类型:原生类型(如intchar等)和自定义类型(如classstructenum等)。结构体类型是一种自定义类型。

2.结构体的定义和使用

结构体使用时可以先定义好结构体类型,然后再用定义好的类型来定义变量。访问结构体成员则是变量名.成员名,举个栗子:

#include<stdio.h>

struct student{	//定义结构体类型
	char name[20];
	int age;
};

int main(int argc,char**argv)
{
	struct student a;//用定义好的结构体类型来定义变量
	a.age=20;//访问结构体成员
	printf("%d.\n",a.age);
	return 0;
}

结构体也可以在定义结构体类型的同时定义结构体变量,下面这段代码就是在定义了一个struct student结构体类型的同时定义了一个struct student类型的变量stu

#include<stdio.h>

struct student{	//定义结构体类型
	char name[20];
	int age;
}stu;//定义结构体类型的同时定义了一个struct student类型的变量stu

int main(int argc,char**argv)
{
	stu.age=20;//访问结构体成员
	printf("%d.\n",stu.age);
	return 0;
}

这里要注意,当使用typedef来对结构体类型重命名的时候,例如下面这段代码,{}后面跟着的stu是新的类型名,而不再是个变量:

#include<stdio.h>

typedef struct student{	//定义结构体类型
	char name[20];
	int age;
}stu;//stu是新的类型名 而不是一个变量

int main(int argc,char**argv)
{
	stu a;
	a.age=20;
	printf("%d.\n",a.age);
	return 0;
}

3.从数组到结构体的进步之处

结构体可以认为是从数组发展而来的。其实数组和结构体都算是数据结构的范畴了,数组就是最简单的数据结构、结构体比数组更复杂一些,链表、哈希表之类的比结构体又复杂一些;二叉树、图等又更复杂一些。

数组有2个明显的缺陷:

  • 1.定义时必须明确给出大小,且这个大小在以后不能再更改;
  • 2.数组要求所有的元素的类型必须一致,更复杂的数据结构就致力于解决数组的这两个缺陷;

结构体就是用来解决数组的第二个缺陷的,可以将结构体理解为一个其中元素类型可以不相同的数组。结构体完全可以取代数组,只是在数组可用的范围内数组比结构体更简单。

4.结构体变量中的元素访问

数组中元素的访问方式表面上有2种:数组下标方式和指针方式,实质上这两种都是指针方式访问。

结构体变量中的元素访问方式只有一种,用 .或者 ->的方式来访问。当通过变量名来访问成员是就用变量名.成员名来访问,当通过指针来访问成员时,就用指针名->成员名来访问,举个栗子:

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

typedef struct student{	//定义结构体类型
	char name[20];
	int age;
}stu;//stu是新的类型名 而不是一个变量

int main(int argc,char**argv)
{
	//通过变量名来访问成员是就用变量名.成员名来访问
	stu a;
	a.age=20;
	printf("%d.\n",a.age);

	//通过指针来访问成员时,就用指针名->成员名来访问
	stu* pa=(stu*)malloc(sizeof(stu));
	pa->age=30;
	printf("%d.\n",pa->age);
	return 0;
}

(.和->访问结构体元素其实质是一样的,只是C语言规定用结构体变量来访问元素用. 用结构体变量的指针来访问元素用->。实际上在高级语言中已经不区分了,都用.)
(3)结构体的访问方式有点类似于数组下标的方式
思考:结构体变量的点号或者->访问元素的实质是什么?其实本质上还是用指针来访问的。

标签:struct,访问,int,age,笔记,stu,C++,数组,结构
来源: https://blog.csdn.net/PecoHe/article/details/112798649

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有