c 中結構體是什麼?有什麼用,c 中的結構體是用來幹嘛的 能解決什麼問題

2022-03-15 00:09:08 字數 5337 閱讀 6940

1樓:

在c語言中,可以定義結構體型別,將多個相關的變數包裝成為一個整體使用。在結構體中的變數,可以是相同、部分相同,或完全不同的資料型別。在c語言中,結構體不能包含函式。

在物件導向的程式設計中,物件具有狀態(屬性)和行為,狀態儲存在成員變數中,行為通過成員方法(函式)來實現。c語言中的結構體只能描述一個物件的狀態,不能描述一個物件的行為。在c++中,考慮到c語言到c++語言過渡的連續性,對結構體進行了擴充套件,c++的結構體可以包含函式,這樣,c++的結構體也具有類的功能,與class不同的是,結構體包含的函式預設為public,而不是private

結構體的一些性質和作用:

結構體和其他型別基礎資料型別一樣,例如int型別,char型別 只不過結構體可以做成你想要的資料型別。以方便日後的使用。

在專案中,結構體是大量存在的。研發人員常使用結構體來封裝一些屬性來組成新的型別。

結構體在函式中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關心這個是什麼,只要根據定義使用就可以了。

2樓:匿名使用者

struct student //結構體

3樓:匿名使用者

c++中的結構體和c中的結構體差不多,給你個**,自己看看吧,

4樓:誰把誓言換流年

這種問題放這裡來問實在沒有意義,建議自己去看書吧

c++中的結構體是用來幹嘛的?能解決什麼問題?

5樓:匿名使用者

結構體 是一種資料結構,比如函式返回值,按常理只能返回一個,但返回結構體型別的話,就能返回多個資料(結構體內本身包含的),而且這些資料還可以使不同的型別。

另外,封裝思想吧,把描述一個物件的資料都放在一個結構體中,比如一個結構體 ren(人)

struct ren

{float height;

float weight;

//等等

};這樣建了一個資料庫就比較容易管理每個人的資料了

6樓:仲孫潔玉

typedef struct x w;

這個是標準型別

c語言和c++都可以用

typedef x w;

這個只有c++才可以,因為c++中可以把struct 省略掉還有問題hi我

c++裡用結構體好嗎?

7樓:飄渺世間天

沒有什麼大的區別,c++中加入結構體是為了向c相容,而結構在c++中作為類的方式來操作的話(比如加入成員函式),其實它就是個預設為public訪問許可權的類了,而如果你把它用做c的結構的話它就是一般的結構。

二者的不同在c++中(當然c中沒有class)唯一表現在訪問許可權上,所以如果你並非想用到類的特性的話你就應該使用結構,但是這並不是一個強制條件,你可以使用struct定義完全公有的資料和函式成員(比如標準庫裡的pair),也可以用struct來定義private成員模擬類操作。

一般使用結構強調的就是公有,而class強調的是封裝,所以原則上如果你不需要對資料進行封裝的話你就可以優先選擇struct而不是class,反之亦然。

8樓:論宇之新宇宙觀

看你的程式需要,結構體有其優點,也有缺點。

9樓:無語翹楚

在c語言中,可以定義結構體型別,將多個相關的變數包裝成為一個整體使用。在結構體中的變數,可以是相同、部分相同,或完全不同的資料型別。在c語言中,結構體不能包含函式。

在物件導向的程式設計中,物件具有狀態(屬性)和行為,狀態儲存在成員變數中,行為通過成員方法(函式)來實現。c語言中的結構體只能描述一個物件的狀態,不能描述一個物件的行為。在c++中,考慮到c語言到c++語言過渡的連續性,對結構體進行了擴充套件,c++的結構體可以包含函式,這樣,c++的結構體也具有類的功能,與class不同的是,結構體包含的函式預設為public,而不是private

結構體的一些性質和作用:

結構體和其他型別基礎資料型別一樣,例如int型別,char型別 只不過結構體可以做成你想要的資料型別。以方便日後的使用。

在專案中,結構體是大量存在的。研發人員常使用結構體來封裝一些屬性來組成新的型別。

結構體在函式中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關心這個是什麼,只要根據定義使用就可以了。

c++中什麼時候用類?什麼時候用結構體?

10樓:諸葛澤熙

類就像一個物件,有自己的變數屬性,自己的方法。是事物的抽象

結構體的話,只是在裡面儲存資料,擁有成員變數和函式。

結構體定義並不是定義一個變數,而是定義了一種資料型別

11樓:匿名使用者

c++中類和結構體的意義是一樣的, 只不過一個成員預設為private, 一個為public

保留結構體這樣的定義只是為了和c相容

像struct test;

和class test;

這2個test是完全等價的

12樓:亞吉那

類就像一個物件,有自己的變數屬性,自己的方法。是事物的抽象如:class test

}結構體的話,只是在裡面儲存資料,擁有成員變數和函式。

結構體定義並不是定義一個變數,而是定義了一種資料型別

c++類和結構體有什麼區別?

13樓:匿名使用者

c/c++結構體的區別

c中的結構體和c++中結構體的不同之處:在c中的結構體只能自定義資料型別,結構體中不允許有函式,而c++中的結構體可以加入成員函式。

c++中的結構體和類的異同:

一、相同之處:結構體中可以包含函式;也可以定義public、private、protected資料成員;定義了結構體之後,可以用結構體名來建立物件。但c中的結構體不允許有函式;

也就是說在c++當中,結構體中可以有成員變數,可以有成員函式,可以從別的類繼承,也可以被別的類繼承,可以有虛擬函式。

二、不同之處:結構體定義中預設情況下的成員是public,而類定義中的預設情況下的成員是private的。類中的非static成員函式有this指標,(而struct中沒有是錯誤的,一直被誤導啊,經過測試struct的成員函式一樣具有this指標),類的關鍵字class能作為template模板的關鍵字 即templateclass a{}; 而struct不可以。

實際上,c中的結構體只涉及到資料結構,而不涉及到演算法,也就是說在c中資料結構和演算法是分離的,而到c++中一類或者一個結構體可以包含函式(這個函式在c++我們通常中稱為成員函式),c++中的結構體和類體現了資料結構和演算法的結合。

14樓:匿名使用者

c++把結構體看作是所有成員訪問許可權都是public的一種類

15樓:幻形術

c++的結構體主要是為了相容c語言而存在的。

大多都一樣,只有兩點區別:

結構體的成員的預設訪問許可權是public,而類的成員的預設訪問許可權是private.

結構體經常用作c/c++最基本的通訊協議載體,標準規定編譯器不能擅自修改結構體各成員之間的記憶體佈局順序,必須嚴格按照成員的宣告先後順序擺放。而標準對類的成員記憶體佈局順序沒有規定,看各編譯器自己如何方便處理。

16樓:

在c++中,結構體是一種特殊形態的類。

結構體和類的唯一區別就是:  結構體和類具有不同的預設訪問控制屬性。

類中,對於未指定訪問控制屬性的成員,其訪問控制屬性為私有型別(private)

結構體中,對於未指定任何訪問控制屬性的成員,其訪問控制屬性為公有型別(public)

c++中,不使用結構體絲毫不會影響程式的表達能力。c++之所以要引入結構體,是為了保持和c程式的相容性。

但有時仍會在c++中使用結構體,是因為,可以使用結構體將不同型別資料組成整體,方便於儲存資料。(若用類來儲存,因類中成員預設為私有,還要為每個資料成員特定函式來讀取和改寫各個屬性,比較麻煩。)

c語言中結構體不允許定義函式成員,且沒有訪問控制屬性的概念。

c++為c語言中的結構體引入了成員函式、訪問控制許可權、繼承、包含多型等物件導向特性。

c++在struct之外引入了class關鍵字,但為了保持與c程式的相容,c++保留了struct關鍵字,並規定結構體預設訪問控制許可權為公有型別。

另外,c語言中,空結構體的大小為0,而c++中空結構體(屬於空類)的大小為1。

c++中空類的大小為1的原因:

空類也可以例項化,類例項化出的每個物件都需要有不同的記憶體地址,為使每個物件在記憶體中的地址不同,所以在類中會加入一個隱含的位元組。

c++結構體的意義是什麼?在小學資訊學奧林匹克競賽裡有什麼用處?

17樓:獵手

簡單的來說,結構體就是一個可以包含不同資料型別的一個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在一個結構中宣告不同的資料型別,第二相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別(而結構體是),陣列名稱是常量指標,所以不可以做為左值進行運算,所以陣列之間就不能通過陣列名稱相互複製了,即使資料型別和陣列大小完全相同。

定義結構體使用struct修飾符,例如:

struct test

; 上面的**就定義了一個名為test的結構體,它的資料型別就是test,它包含兩個成員a和b,成員a的資料型別為浮點型,成員b的資料型別為整型。

由於結構體本身就是自定義的資料型別,定義結構體變數的方法和定義普通變數的方法一樣。

test pn1;

這樣就定義了一test結構體資料型別的結構體變數pn1,結構體成員的訪問通過點操作符進行,pn1.a=10 就對結構體變數pn1的成員a進行了賦值操作。

注意:結構體生命的時候本身不佔用任何記憶體空間,只有當你用你定義的結構體型別定義結構體變數的時候計算機才會分配記憶體。

結構體,同樣是可以定義指標的,那麼結構體指標就叫做結構指標。

結構指標通過->符號來訪問成員,下面我們就以上所說的看一個完整的例子:

#include

#include

using namespace std;

struct test//定義一個名為test的結構體

; void main()

總之,結構體可以描述陣列不能夠清晰描述的結構,它具有陣列所不具備的一些功能特性。

18樓:中國死狗

小學資訊學奧林匹克競賽就考c++了?????

c 中new結構體的問題,c 中new一個結構體的問題。

這是個引數匹配的問題。你的test函式的引數是一個指標陣列,陣列的每個元素是指向stu結構體的指標,而你在呼叫test函式時,你傳進去的引數一個指向結構體陣列的指標,他們的型別不匹配,你只要將test函式的引數中的 去掉即可,即改為void test struct stu s 因為引數型別不匹配。將...

c結構體中如果含有其他結構體陣列怎麼初始化?求大神指教

將a suba new a 10 改為 a suba 10 即可.此處 a 代表型別,suba代表變數名 類似int arr 10 寫成 int 10 arr 明顯錯誤 c 中結構體如何定義?結構體的成員中含有陣列 struct b 程式呼叫時 採用 b ab ab.suba new a 10 的方...

cqsort對結構體排序,C 中sort怎麼對結構體陣列中的字串陣列排序?

你如果要按照x的大小順序牌還是y 的大小順序牌,int comp const void a,const void b vc6 幫助裡的對qsort 裡compare函式指標引數的要求 compare void elem1,void elem2 the routine must compare the...