結構體陣列指向結構體變數的指標

2021-08-29 01:40:25 字數 3838 閱讀 5114

一、結構體陣列的定義

struct student

stu[3];

陣列各元素在記憶體中連續存放

二、結構體陣列的初始化

struct student

stu[3]=,,};

struct student

stu[ ]=,,};

• 輸入10個學生的姓名、學號和成績,將其中不及格者的姓名、學號和成績輸出(p163.17)

struct student

char
name[10];

int  number;

int score;

void input(student *p_stu)

cout<

input the name ,number and score of a student:」

i=0;i<10;i++)

cin>>p_stu[i].name;
cin>>p_stu[i].number;

cin>>p_stu[i].score;void output(student *p_stu)

cout<

the name ,number and score of a student:」

i=0;i<10;i++)

if(p_stu[i].score<60)
;student stu, *p=&stu;

stu.num=10301; strcpy(stu.name,″wang fu″);

stu.***=『f』; stu.score=89.5;

cout

″<

″< ***<

score

• 指標與記憶體動態分配

通過使用new與delete單目運算子來實現動態變數的分配與撤消

1)動態申請記憶體操作符 new

使用格式:
new 《型別名》 //動態變數

new 《型別名》 ( 《初值》 )

new 《型別名》 [ 《元素個數》 ]//動態陣列

功能:
生成乙個(或一批)所給型別的無名動態變數。結果值:

失敗:0(null)

• 指標與記憶體動態分配

例:

int *pi, *pj, a=10; 

char *pc;

pi = new int;

*pi = a*a;

pc = new char('a');

pj = new int[10];

2)釋放記憶體操作符delete

使用格式:

delete 《指標》

delete [ ] 《指標》

功能:釋放通過new生成的動態變數(或動態陣列),但指標變數仍存在。

例:

int *pi, *pj;

pi = new int;

pj = new int[10];

...delete pi;

//釋放動態變數*pi, 但指標變數pi仍存在

delete pj;

以變數形式分配記憶體比較死板。有了new和delete,就可以實現一種動態分配記憶體的形式,即通過指標引用,而記憶體的分配和釋放可以在程式的任何地方進行。

int *pint;

char *pchar; float *pfloat;

pfloat = new

float; //生成1個浮點型變數

pchar = new

char; //生成1個字元型變數

pint = new

int; //生成1個整型變數

這些變數都沒有名字。

*pchar = 『a』;

*pint = 5;

*pfloat = 4.7;

• 當不再需要這些變數時,可在程式的任何地點釋放掉它們:

delete pchar;

delete pint; delete pfloat;

這裡釋放的是動態的(char,int,float)變數,而不是指標變數(pchar, pint, pfloat)。

• 在使用動態變數時應注意的是,要保護動態變數的位址。

例如在執行

pi=new int; 之後,不要輕易地沖掉指標pi中的值,假如執行了pi=&a;語句之後,再釋放原來生成的動態變數:

delete pi; 已經達不到原來的目標了。

這將造成記憶體的洩漏,如果過多的話,將占用大量系統記憶體資源,造成記憶體資源的浪費。

動態建立結構體變數舉例

#include

#include

using namespace std;

struct student

stu=;

void print(student *p)

coutcoutcoutcoutint main( )

void

print(student *);

int i;

student

*pt=&stu;

print(pt);

pt=new student;

cin>>pt->num;

for(i=0;i<3;i++)

cin>>pt->score[i];
print(pt);

delete pt;

return 0;

(1) 用結構體變數作函式引數

#include

#include

using namespace std;

struct student //宣告結構體型別student

;void print(student stu)

cout

student

stu; //定義結構體變數

stu.num=12345;        

stu.name=″li

fung″;

stu.score[0]=67.5;

stu.score[1]=89;

stu.score[2]=78.5;

print(stu);

return 0;

(2) 用指向結構體變數的指標作實參

#include

#include

using namespace std;

struct student

stu=;

void print(student *p)

coutcoutcoutint main( )

void print(student *);     

student

*pt=&stu;

print(pt);                      

return 0;

結構體變數和指向結構體變數的指標

目錄概念 記憶體分配 物件的引用 結構體變數和結構體指標變數作形參的區別 以結構體變數和結構體指標變數形參的函式呼叫 結構體變數是指將不同的資料型別整合成乙個有機的整體,以便於呼叫。struct student student stud1 stud1就是結構體變數結構體指標變數是指指向結構體變數的指...

指向結構體變數的指標。

這兩天調程式,在指向結構體變數指標這一塊還有 運算子搞得不是很明白,下面是那段程式仔細研究一下。typedef struct usb down packet 下傳的資料報結構,用於命令 寫資料 u uint8 mlength 下面的緩衝區的長度,讀寫操作的位元組數 uint8 mbuffer max...

指向結構體變數的指標

定義 結構體變數的指標就是該變來那個所佔據的記憶體段的起始位址。可以設乙個指標變數,來指向乙個結構體變數,此時該指標變數的值是結構體變數的起始位址。設p是指向結構體變數的陣列,則可以通過以下的方式,呼叫指向的那個結構體中的成員 1 結構體變數.成員名。如,stu.num。2 p 成員名。如,p nu...