结构体(struct)学习总结

一、结构体的定义和操作

定义结构体变量:

  1. 先定义结构体再定义结构体变量。
  2. 定义结构体的同时定义结构体变量。
    如下:
struct node{//其中node为结构体类型名
  char name[101];
  char number[101];
  string s;
}//one,two[101];
node one,two[101];//定义结构体变量

在定义结构体时,定义的结构体名地位等同于double,int等数据类型,在定义结构体时,系统不会为其分配内存,只有定义结构体变量时才会给其分配内存。

结构体变量的特点

  1. 结构体变量可以整体进行操作,这在某些数据排序方面具有很大的便利。
  2. 对结构体变量的成员访问时也非常方便。
    例如:cout<<two[2].name
  3. 结构体变量的初始化和数组的初始类相似。
node three={"liming","110","hello"};

成员调用

一般形式为:结构体变量名.成员名
也就是:

node one,two[101];
    cin>>one.name>>one.s;
    cin>>two[1].name;

成员函数的调用

一般形式为:结构体变量名.成员函数
结构体成员函数默认将结构体变量作为引用参数。
如:

#include<iostream>
#include<string>
using namespace std;
struct node{//其中node为结构体类型名
  char name[101];
  char number[101];
  string s;
  void input(){
    cin>>name>>number>>s;
  }
  void output(){
    cout<<name<<endl;
    cout<<number<<endl;
    cout<<s<<endl;
  }
};//one,two[101];
int main()
{
    node one,two[101];
    one.input();
    one.output();
    return 0;
}

运行结果:

liming
110
hello
liming
110
hello

Process returned 0 (0x0)   execution time : 23.697 s
Press any key to continue.

二、结构体指针

结构体指针的定义和使用

基本与基本类型指针的定义一样
结构体名*结构体变量名

struct node{
  int a;
  char name[101];
}*one;//定义一个指针变量

引用方式:

  1. 指针名->成员名
  2. (*指针名).成员名
    如:
struct node{
  int a;
  char name[101];
}two;
node *one=&two;
    cin>>one->a;
    strcpy(one->name,"hello word");//cin>>one->name;
    cout<<one->a<<endl;//(*one).a;
    cout<<one->name<<endl;

以上内容放在编译器内是不能运行的,只是为了解释方便。
注意:对字符数组赋值时用strcpy与cin是不一样的,前者可以加上空格,而后者加上空格则会导致结果出现偏差。

自引用结构

在结构体内部包含一个类型为该结构的成员这是非法的。
如:

struct node{
  int a;
  char name[101];
  node p;//错的
}two;

其中p的存在是非法的,因为成员p又是另外一个完整的结构,而p的结构中又有成员p,这就有点像永远不会停止的递归,是非法的。但,如果是结构体指针的话就是合法的。
如:

struct node{
  int a;
  char name[101];
  node *p;
}two;

为什么这是合法的呢?
因为其中指针的长度在被定义前就一定被编译器知道,而如果其中不是指针而是结构体那么编译器是不知道它的长度的,自然会报错。
那么这种自引用结构有什么用呢?
这是实现其他结构的基础,是实现动态结构数组的基础,其中包括链表、堆、栈、树,都是自引用结构实现的。
如下就是链表结构。

struct node{
  int a;
  char name[101];
  node *next;
}point;

在这里就不细说了,到时再总结。

发布了42 篇原创文章 · 获赞 42 · 访问量 9312

猜你喜欢

转载自blog.csdn.net/amazingee/article/details/104490056
今日推荐