1樓:匿名使用者
一是結構標記的宣告,如下:
struct point ;
建立了標記point,就可以用它來宣告變數:
struct point p1,p2;
注意不能漏掉前面的struct。
結構標記的宣告可以和結構變數的宣告合併在一起:
struct point p1,p2;
二是結構型別的定義:
typedef struct point;
然後就可以像內建型別一樣使用point,如宣告變數:
point p1,p2;
這裡不允許寫struct point。
「結構型別變數」是什麼,與「結構體成員變數」有什麼區別??
2樓:久落江邊
1.c的結構體和c++結構體的區別
1.1 c的結構體內不允許有函式存在,c++允許有內部成員函式,且允許該函式是虛擬函式。所以c的結構體是沒有建構函式、解構函式、和this指標的。
1.2 c的結構體對內部成員變數的訪問許可權只能是public,而c++允許public,protected,private三種。
1.3 c語言的結構體是不可以繼承的,c++的結構體是可以從其他的結構體或者類繼承過來的。
以上都是表面的區別,實際區別就是程序導向和麵向物件程式設計思路的區別:
c的結構體只是把資料變數給包裹起來了,並不涉及演算法。
而c++是把資料變數及對這些資料變數的相關演算法給封裝起來,並且給對這些資料和類不同的訪問許可權。
c語言中是沒有類的概念的,但是c語言可以通過結構體內建立函式指標實現物件導向思想。
2.c++的結構體和c++類的區別
2.1 c++結構體內部成員變數及成員函式預設的訪問級別是public,而c++類的內部成員變數及成員函式的預設訪問級別是private。
2.2 c++結構體的繼承預設是public,而c++類的繼承預設是private。
c語言中定義結構體的幾種方法
3樓:非常可愛
1、先定義結構體型別,再定義結構體變數。
structstudent;
structstudentstu1,stu2;
//此時stu1,stu2為student結構體變數2、定義結構體型別的同時定義結構體變數。
structstudentstu1,stu2;
3、直接定義結構體變數。
structstu1,stu2;
擴充套件資料結構體的定義
在c語言中,結構體(struct)指的是一種資料結構,是c語言中聚合資料型別(aggregatedatatype)的一類。結構體可以被宣告為變數、指標或陣列等,用以實現較複雜的資料結構。
結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的型別,成員一般用名字訪問。結構體,他就將不同型別的資料存放在一起,作為一個整體進行處理。
4樓:馬小芳
1) 先定義結構
體型別,再定義結構體型別變數:
struct stu / *定義學生結構體型別* /;struct stu student1,student2;/ * 定義結構體型別變數* /
struct stu student3,student4;
用此結構體型別,可以定義更多的該結構體型別變數。
2 ) 定義結構體型別同時定義結構體型別變數:
struct data
time1,time2;
也可以再定義如下變數:
struct data time3,time4;
用此結構體型別,同樣可以定義更多的該結構體型別變數。
3) 直接定義結構體型別變數:
struct
person1,person2; / *定義該結構體型別變數* /該定義方法由於無法記錄該結構體型別,所以除直接定義外,不能再定義該結構體型別變數。
c語言如何定義結構體變數
5樓:文化廚子
首先,定義一個結構的一般形式為:
struct結構名
;成員表由若干個成員組成, 每個成員都是該結構的一個組成部分。對每個成員也必須作型別說明,其形式為:「型別說明符 成員名;」。成員名的命名應符合識別符號的書寫規定。例如:
struct stu
;在這個結構定義中,結構名為stu,該結構由4個成員組成。 第一個成員為num,整型變數;第二個成員為name,字元型陣列;第三個成員為***,字元型變數;第四個成員為score,浮點型變數。 應注意在括號後的分號是必不可少的。
然後,當結構定義完成後,即建立了一種資料型別,可以像int、float等內建型別一樣使用,以上面定義的stu結構體來和int型別對比著看。
int a;//定義一個int型別的變數a
stu a; //定義一個stu型別的變數a
int *p; //定義一個int型別的指標p
stu *p; //定義一個stu型別的指標p
int a[10];//定義一個int型別的陣列a,它有10個元素,每個元素是int型別
stu a[10];//定義一個stu型別的陣列a,它有10個元素,每個元素是stu型別。
6樓:匿名使用者
typedef 能隱藏笨拙的語法構造以及平臺相關的資料型別,從而增強可移植性和以及未來的可維護性,例如typedef int am;這裡am形式就代表整型int,同樣在你的例子中:
typedef+
struct bmp_picture_typ+bmp_picture
是將結構體型別bmp_picture_typ用bmp_picture形式來代替,來隱藏笨拙的語法構造,之後是「,*bmp_picture_ptr」,注意前面有個逗號,說明與bmp_picture同等地位,不過多了個*,說明bmp_picture_ptr是表示bmp_picture_typ指標型別的形式,就像typedef int* bm,即用bm形式表示int*,而這裡的形式只是將兩者合併為typedef int am,*bm;而已
7樓:匿名使用者
typedef struct bmp_picture_typbmp_picture,*bmp_picture_ptr;
等價於:
typedef struct bmp_picture_typbmp_picture;
typedef struct bmp_picture_typ*bmp_picture_ptr;
這只是宣告瞭一個結構體複合型別。
什麼是類定義形式的結構體變數
8樓:匿名使用者
語法都是瞭解的, 只是在用途上有些不同
定義與許可權都是固定的
一般的用法是, 對struct,可以當作純粹的儲存類, 當類之間通訊的時候傳遞複雜引數使用.
9樓:匿名使用者
(解釋非原創)
定義一個類,這個類裡面只有資料成員。其實類在只有公有資料成員的時候和結構體幾乎沒什麼兩樣
c++中的struct和class只有2點區別:
1.class中預設的成員訪問許可權是private的,而struct中則是public的。
2.從class繼承預設是private繼承,而從struct繼承預設是public繼承。
除此這外無任何區別。
關於cpp中的結構體,它也支援 virtual,支援繼承,但是,我並不用它,
沒必要將結構體和類兩個概念混用。增加自己的煩惱而已,
除非,你想在整個都是c風格的專案中的某些地方用封裝,多型等oo的特性,而保持風格一致。 此外,可以用大括號的形式初始化的。
#include
#include
using namespace std;
struct st
st(int i,int j )
virtual v_proc()
~test()
int operator +(const int a)
};struct test_ch : public test
virtual v_proc()
~test_ch()
};class ctest
~ctest()
};int main()
結構體變數定義
10樓:匿名使用者
差不多 沒什麼太大的區別 一個是在定義的時候不賦值 一個是在定義的時候賦值
類似於int a[2];
int a[2]=;
struct tm 相當於 int懂了麼
11樓:匿名使用者
struct tm a=;
這樣可以將 結構體變數 a 中的成員 都初始化一下如:char a[100];
char a[100] = ;
char a[100] = ;相當於: char a[100]; memset(a,'\0',100);
12樓:匿名使用者
第一種只是單純的定義,第二種定義的同時進行初始化,即將結構體的所有成員賦值為0.
定義結構體變數,如下幾種形式可以用同一型別的結構體指標指向它們嗎?
13樓:匿名使用者
第一,二兩個。三,四兩個。和第五個。完全是可以各用一個同型別的指標表示的。但是如果要。將五個只用一個指標表示那一定得用強制轉換了。
14樓:匿名使用者
強制型別轉換。在者這幾個結構體變數名和變數型別完全一樣,可只定義一個結構體,然後多定義幾個別名來做不同的處理用,這樣就完全可用一個結構體指標來指向了。
c語言中如何定義一個結構體
15樓:藥郎小跟班
結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標誌,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體宣告的變數。在一般情況下,tag、member-list、variable-list這3部分至少要出現2個。
結構體的成員可以包含其他結構體,也可以包含指向自己結構體型別的指標,而通常這種指標的應用是為了實現一些更高階的資料結構如連結串列和樹等。如果兩個結構體互相包含,則需要對其中一個結構體進行不完整宣告。
擴充套件資料:
一、結構體作用:
結構體和其他型別基礎資料型別一樣,例如int型別,char型別,只不過結構體可以做成你想要的資料型別,以方便日後的使用。
在實際專案中,結構體是大量存在的,研發人員常使用結構體來封裝一些屬性來組成新的型別。由於c語言內部程式比較簡單,研發人員通常使用結構體創造新的「屬性」,其目的是簡化運算。
結構體在函式中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關心這個是什麼,只要根據定義使用就可以了。
二、結構體的大小與記憶體對齊:
結構體的大小不是結構體元素單純相加就行的,因為我們主流的計算機使用的都是32bit字長的cpu,對這型別的cpu取4個位元組的數要比取一個位元組要高效,也更方便。
所以在結構體中每個成員的首地址都是4的整數倍的話,取資料元素時就會相對更高效,這就是記憶體對齊的由來。每個特定平臺上的編譯器都有自己的預設「對齊係數」(也叫對齊模數)。
程式設計師可以通過預編譯命令#pragma pack(n),n=1,2,4,8,16來改變這一系數,其中的n就是你要指定的「對齊係數」。
三、結構體的規則:
1、資料成員對齊規則:結構(struct)(或聯合(union))的資料成員,第一個資料成員放在offset為0的地方,以後每個資料成員的對齊按照#pragma pack指定的數值和這個資料成員自身長度中,比較小的那個進行。
2、結構(或聯合)的整體對齊規則:在資料成員完成各自對齊之後,結構(或聯合)本身也要進行對齊,對齊將按照#pragma pack指定的數值和結構(或聯合)最大資料成員長度中,比較小的那個進行。
3、結合1、2可推斷:當#pragma pack的n值等於或超過所有資料成員長度的時候,這個n值的大小將不產生任何效果。
c語言中定義結構體型別變數的方法
1 使用struct關鍵字,分為匿名定義和非匿名定義2 匿名定義 定義好的結構體型別只能使內 用一次 定義一個結容構體變數point structpoint 3 非匿名定義 定義好的結構體型別可以多次使用 定義兩個結構體變數point1,point2struct point struct point...
有以下結構體說明和變數定義,並如圖所示指標P指向a,指標q指
有以下結bai構體說明和變數定義,並如du圖所示指標p指向zhia,指標daoq指向b變數,懸賞分 10 離問內 題結束還有 14 天 20 小時 容則不能把節點b連線到節點a之後的語句是 struct node a,b,p a,q b a,b,p a,q b nest b d.p nest q 答...
火鍋有幾種做法,分別是
紅油 清湯 鴛鴦 活鯽魚火鍋 特 點 湯色乳白,口味鮮香。原 料 原料準備 活鯽魚約8釐米長30條,菠菜100克,嫩白菜心100克,粉絲200克。調料選用 精鹽15克,味精6克,白糖8克,香醋50克,蔥段25克,薑末50克,料酒15克,胡椒麵3克,清湯2000克。製作過程 1 宰殺活鯽魚,收拾乾淨,...