标签:struct 访问 int age 笔记 stu C++ 数组 结构
C++学习笔记:struct结构体
1.结构体概述
C++
语言中的2种类型:原生类型(如int
、char
等)和自定义类型(如class
,struct
,enum
等)。结构体类型是一种自定义类型。
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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。