最新国产AV资源网_亚洲熟女AV天堂五月天_中文字幕丶东京热_中文字幕乱码免费高清视频

Hi,您好,歡迎來到西安盛圖軟件科技有限公司!

C++| struct結(jié)構(gòu)體

發(fā)布時間:2023-11-27 14:13:38


C++中,結(jié)構(gòu)體(struct)指的是一種數(shù)據(jù)結(jié)構(gòu),是C++中聚合數(shù)據(jù)類型(aggregate data type)的一類。結(jié)構(gòu)體可以被聲明為變量、指針或數(shù)組等,用以實現(xiàn)較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)體同時也是一些元素的集合,這些元素稱為結(jié)構(gòu)體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。本文主要介紹C++中struct結(jié)構(gòu)體。

1、結(jié)構(gòu)體的定義與聲明

結(jié)構(gòu)體的定義如下所示,struct為結(jié)構(gòu)體關(guān)鍵字,tag為結(jié)構(gòu)體的標志,member-list為結(jié)構(gòu)體成員列表,其必須列出其所有成員;variable-list為此結(jié)構(gòu)體聲明的變量。

struct tag {member-list} variable-list ;

在一般情況下,tag、member-list、variable-list這3部分至少要出現(xiàn)2個。

例如,

//此聲明聲明了擁有3個成員的結(jié)構(gòu)體,分別為整型的a,字符型的b和雙精度的c
//同時又聲明了結(jié)構(gòu)體變量s1
//這個結(jié)構(gòu)體并沒有標明其標簽
struct {
   int a;
   char b;
   double c;
} s1;
//同上聲明了擁有3個成員的結(jié)構(gòu)體,分別為整型的a,字符型的b和雙精度的c
//結(jié)構(gòu)體的標簽被命名為SIMPLE,沒有聲明變量
struct SIMPLE{
   int a;
   char b;
   double c;
};
//用SIMPLE標簽的結(jié)構(gòu)體,另外聲明了變量t1、t2、t3
struct SIMPLE t1, t2[20], *t3;
//也可以用typedef創(chuàng)建新類型
typedef struct{
   int a;
   char b;
   double c;
} Simple2;
//可以用Simple2作為類型聲明新的結(jié)構(gòu)體變量
Simple2 u1, u2[20], *u3;//這樣聲明C語言中也是可以的,因為是typedef定義的
SIMPLE tt;//C++可以這樣定義,C語言中前面需要加struct,不可以省略

注意:如上面示例中,即使他們的成員列表是一樣的,它們也是不同的類型。以上語法與C語言中基本相同,C++中聲明結(jié)構(gòu)體變量時可以省略struct。

2、嵌套結(jié)構(gòu)體

結(jié)構(gòu)體的成員可以包含其他結(jié)構(gòu)體,也可以包含指向自己結(jié)構(gòu)體類型的指針,而通常這種指針的應(yīng)用是為了實現(xiàn)一些更高級的數(shù)據(jù)結(jié)構(gòu)如鏈表和樹等。

例如,

//此結(jié)構(gòu)體的聲明包含了其他的結(jié)構(gòu)體
struct COMPLEX{
   
char string[100];
   
struct SIMPLE a;
};
//此結(jié)構(gòu)體的聲明包含了指向自己類型的指針
struct NODE{
   
char string[100];
   
struct NODE *next_node;
};

如果兩個結(jié)構(gòu)體互相包含,則需要對其中一個結(jié)構(gòu)體進行不完整聲明。

例如,

struct B;    
//對結(jié)構(gòu)體B進行不完整聲明
//結(jié)構(gòu)體A中包含指向結(jié)構(gòu)體B的指針
struct A{
   
struct B *partner;
   
//other members;
};
//結(jié)構(gòu)體B中包含指向結(jié)構(gòu)體A的指針,在A聲明完后,B也隨之進行聲明
struct B{
   
struct A *partner;
   
//other members;
};

3、沒有成員變量的結(jié)構(gòu)體

也可以定義一個空的結(jié)構(gòu)體,有時候我們需要某一個結(jié)構(gòu)體數(shù)據(jù)類型,但是暫時又不知道如何填充里面的成員變量,可以有如下定義:

struct Books {
 //TODO
} book;

4、訪問結(jié)構(gòu)體成員

訪問一個結(jié)構(gòu)體成員變量,可以使用成員操作符(.) ,

例如,

#include <iostream>
using namespace std;
#include <string.h>
struct Books {
  char  title[50];
  char  author[50];
  char  subject[100];
  int   book_id;
};
int main() {
  struct Books Book1;        /* Declare Book1 of type Book */
  struct Books Book2;        /* Declare Book2 of type Book */
  /* book 1 specification */
  strcpy( Book1.title, "C Programming");
  strcpy( Book1.author, "Nuha Ali");
  strcpy( Book1.subject, "C Programming Tutorial");
  Book1.book_id = 6495407;
  /* book 2 specification */
  strcpy( Book2.title, "Telecom Billing");
  strcpy( Book2.author, "Zara Ali");
  strcpy( Book2.subject, "Telecom Billing Tutorial");
  Book2.book_id = 6495700;
  /* print Book1 info */
  printf( "Book 1 title : %s\n", Book1.title);
  printf( "Book 1 author : %s\n", Book1.author);
  printf( "Book 1 subject : %s\n", Book1.subject);
  printf( "Book 1 book_id : %d\n", Book1.book_id);
  /* print Book2 info */
  printf( "Book 2 title : %s\n", Book2.title);
  printf( "Book 2 author : %s\n", Book2.author);
  printf( "Book 2 subject : %s\n", Book2.subject);
  printf( "Book 2 book_id : %d\n", Book2.book_id);
  return 0;
}

5、結(jié)構(gòu)體作用

結(jié)構(gòu)體和其他類型基礎(chǔ)數(shù)據(jù)類型一樣,例如,int類型、char類型,只不過結(jié)構(gòu)體可以做成你想要的數(shù)據(jù)類型。以方便日后的使用。

在實際項目中,結(jié)構(gòu)體是大量存在的。研發(fā)人員常使用結(jié)構(gòu)體來封裝一些屬性來組成新的類型。研發(fā)人員通常使用結(jié)構(gòu)體創(chuàng)造新的“屬性”,其目的是簡化運算。

結(jié)構(gòu)體在函數(shù)中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關(guān)心這個是什么,只要根據(jù)定義使用就可以了。

6、結(jié)構(gòu)作為函數(shù)參數(shù)

上一篇:C++| 枚舉(enum)
下一篇:C++中const int*, const int * const, 和 int const *區(qū)別

歡迎登錄盛圖科技

歡迎注冊盛圖科技

已有賬號,立即登錄