一、結構體陣列的定義
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...