亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++動態分配和撤銷內存以及結構體類型作為函數參數

2020-01-26 14:52:28
字體:
來源:轉載
供稿:網友

C++動態分配內存(new)和撤銷內存(delete)
在軟件開發過程中,常常需要動態地分配和撤銷內存空間,例如對動態鏈表中結點的插入與刪除。在C語言中是利用庫函數malloc和free來分配和撤銷內存空間的。C++提供了較簡便而功能較強的運算符new和delete來取代malloc和free函數。

注意: new和delete是運算符,不是函數,因此執行效率高。

雖然為了與C語言兼容,C++仍保留malloc和free函數,但建議用戶不用malloc和free函數,而用new和delete運算符。new運算符的例子:

new int; //開辟一個存放整數的存儲空間,返回一個指向該存儲空間的地址(即指針)new int(100); //開辟一個存放整數的空間,并指定該整數的初值為100,返回一個指向該存儲空間的地址new char[10]; //開辟一個存放字符數組(包括10個元素)的空間,返回首元素的地址new int[5][4]; //開辟一個存放二維整型數組(大小為5*4)的空間,返回首元素的地址float *p=new float (3.14159); //開辟一個存放單精度數的空間,并指定該實數的初值為//3.14159,將返回的該空間的地址賦給指針變量p

new運算符使用的一般格式為:

  new 類型 [初值];

用new分配數組空間時不能指定初值。如果由于內存不足等原因而無法正常分配空間,則new會返回一個空指針NULL,用戶可以根據該指針的值判斷分配空間是否成功。

delete運算符使用的一般格式為:

  delete [ ] 指針變量

例如要撤銷上面用new開辟的存放單精度數的空間(上面第例,應該用

  delete p;


前面用“new char[10];”開辟的字符數組空間,如果把new返回的指針賦給了指針變量pt,則應該用以下形式的delete運算符撤銷該空間:

  delete [] pt; //在指針變量前面加一對方括號,表示是對數組空間的操作

【例】開辟空間以存放一個結構體變量。

#include <iostream>#include <string>   using namespace std;struct Student //聲明結構體類型Student{  string name;  int num;  char sex;};int main( ){  Student *p; //定義指向結構體類型Student的數據的指針變量  p=new Student; //用new運算符開辟一個存放Student型數據的空間  p->name="Wang Fun"; //向結構體變量的成員賦值  p->num=10123;  p->sex='m';  cout<<p->name<<endl<<p->num  <<endl<<p->sex<<endl; //輸出各成員的值  delete p; //撤銷該空間  return 0;}

運行結果為:

Wang Fun 10123 m

圖為new student開辟的空間。

在動態分配/撤銷空間時,往往將這兩個運算符和結構體結合使用,是很有效的??梢钥吹剑?br />要訪問用new所開辟的結構體空間,無法直接通過變量名進行,只能通過指針p進行訪問。如果要建立一個動態鏈表,必須從第一個結點開始,逐個地開辟結點并輸入各結點數據,通過指針建立起前后相鏈的關系。

C++結構體類型作為函數參數
將一個結構體變量中的數據傳遞給另一個函數,有下列3種方法:
用結構體變量名作參數。一般較少用這種方法。
用指向結構體變量的指針作實參,將結構體變量的地址傳給形參。
用結構體變量的引用變量作函數參數。

下面通過一個簡單的例子來說明,并對它們進行比較。

【例】有一個結構體變量stu,內含學生學號、姓名和3門課的成績。要求在main函數中為各成員賦值,在另一函數print中將它們的值輸出。

1) 用結構體變量作函數參數。

#include <iostream>#include <string>using namespace std;struct Student//聲明結構體類型Student{  int num;  char name[20];  float score[3];};int main( ){  void print(Student); //函數聲明,形參類型為結構體Student  Student stu; //定義結構體變量  stu.num=12345; //以下5行對結構體變量各成員賦值  stu.name="Li Fung";  stu.score[0]=67.5;  stu.score[1]=89;  stu.score[2]=78.5;  print(stu); //調用print函數,輸出stu各成員的值  return 0;}void print(Student st){  cout<<st.num<<" "<<st.name<<" "<<st.score[0]  <<" " <<st.score[1]<<" "<<st.score[2]<<endl;}

運行結果為:

12345 Li Fung 67.5 89 78.5 (2)

2)用指向結構體變量的指針作實參在上面程序的基礎上稍作修改即可。

#include <iostream>#include <string>using namespace std;struct Student{  int num; string name; //用string類型定義字符串變量  float score[3];}stu={12345,"Li Fung",67.5,89,78.5}; //定義結構體student變量stu并賦初值int main( ){  void print(Student *); //函數聲明,形參為指向Student類型數據的指針變量  Student *pt=&stu; //定義基類型為Student的指針變量pt,并指向stu  print(pt); //實參為指向Student類數據的指針變量  return 0;}//定義函數,形參p是基類型為Student的指針變量void print(Student *p){  cout<<p->num<<" "<<p->name<<" "<<p->score[0]<<" " <<  p->score[1]<<" "<<p->score[2]<<endl;}

調用print函數時,實參指針變量pt將stu的起始地址傳送給形參p(p也是基類型為student的指針變量)。這樣形參p也就指向stu,見圖。

在print函數中輸出p所指向的結構體變量的各個成員值,它們也就是stu的成員值。在main函數中也可以不定義指針變量pt,而在調用print函數時以&stu作為實參,把stu的起始地址傳給實參p。

3) 用結構體變量的引用作函數參數

#include <iostream>#include <string>using namespace std;struct Student{  int num;  string name;  float score[3];}stu={12345,"Li Li",67.5,89,78.5};int main( ){  void print(Student &);  //函數聲明,形參為Student類型變量的引用  print(stu);  //實參為結構體Student變量  return 0;}//函數定義,形參為結構體Student變量的引用void print(Student &stud){  cout<<stud.num<<" "<<stud.name<<" "<<stud.score[0]  <<" " <<stud.score[1]<<" "<<stud.score[2]<<endl;}

程序(1)用結構體變量作實參和形參,程序直觀易懂,效率是不高的。
程序(2)采用指針變量作為實參和形參,空間和時間的開銷都很小,效率較高。但程序(2)不如程序(1)那樣直接。
程序(3)的實參是結構體Student類型變量,而形參用Student類型的引用,虛實結合時傳遞的是stu的地址,因而效率較高。它兼有(1)和(2)的優點。

引用變量主要用作函數參數,它可以提高效率,而且保持程序良好的可讀性。在本例中用了string方法定義字符串變量,在某些C++系統中目前不能運行這些程序,讀者可以修改程序,使之能在自己所用的系統中運行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线观看免费| 国产一区在线播放| 国产成人精品免高潮在线观看| 欧美黄网免费在线观看| 欧美日本高清一区| 欧美激情视频一区二区| 92看片淫黄大片欧美看国产片| 91亚洲精品在线观看| 91精品国产综合久久久久久蜜臀| 亚洲影视中文字幕| 国产精品一区二区久久精品| www.国产一区| 久久久久久久香蕉网| 久久国产加勒比精品无码| 中文字幕精品久久| 夜夜嗨av一区二区三区四区| 中文字幕欧美日韩| 亚洲欧美另类在线观看| 日本精品久久久| 日韩成人免费视频| 欧美黑人狂野猛交老妇| 性欧美xxxx| 国产日韩精品在线观看| 国产成人精品电影久久久| 国产精品成熟老女人| 久久男人的天堂| 欧美视频免费在线| 久久99精品视频一区97| 亚洲免费av电影| 日韩在线欧美在线国产在线| 国产成人自拍视频在线观看| 91精品国产综合久久香蕉922| 成人免费在线视频网址| 红桃视频成人在线观看| 欧美成人精品xxx| 在线成人激情黄色| 亚洲一级一级97网| 中文字幕在线国产精品| 亚洲精品97久久| 国产精品黄页免费高清在线观看| 亚洲欧洲日产国码av系列天堂| 国产成人一区二| 国产中文字幕亚洲| 亚洲国产高清高潮精品美女| 欧美精品videosex性欧美| 高清一区二区三区日本久| 国产精品91在线观看| 国产精品黄页免费高清在线观看| 一区二区三区www| 欧美一级淫片aaaaaaa视频| 亚洲天堂色网站| 国产精品福利观看| 国产成人精品最新| 国产不卡在线观看| 欧美一级视频免费在线观看| 九九九热精品免费视频观看网站| 国产精品久久久久福利| 97国产真实伦对白精彩视频8| 欧美高清视频在线| 亚洲激情小视频| 欧美日韩另类字幕中文| 国产黑人绿帽在线第一区| 亚洲欧美成人精品| 日韩综合中文字幕| 亚洲欧美成人一区二区在线电影| 国产日韩在线播放| 国产精品久久久久久av下载红粉| 91色p视频在线| 日韩福利伦理影院免费| 中文字幕日韩专区| 性色av一区二区三区免费| 欧美激情视频免费观看| 国产精品视频xxxx| 尤物九九久久国产精品的分类| 黑人狂躁日本妞一区二区三区| 日韩av在线免费播放| 亚洲黄页网在线观看| 91在线中文字幕| 国产免费一区二区三区香蕉精| 中文字幕久久亚洲| 国产精品久久久久久久久久久新郎| 欧美电影在线免费观看网站| 日产精品久久久一区二区福利| 91夜夜揉人人捏人人添红杏| 成人免费在线视频网址| 日韩精品免费在线观看| 欧美精品在线极品| 欧美日韩激情美女| 亚洲电影免费观看高清完整版在线| 亚洲精品一区二区在线| 精品日本美女福利在线观看| 久久91精品国产91久久久| 亚洲精品在线看| 亚洲va欧美va国产综合久久| 国产精品久久久久久影视| 成人乱人伦精品视频在线观看| 啊v视频在线一区二区三区| 九色精品免费永久在线| 亚洲新声在线观看| 色播久久人人爽人人爽人人片视av| 欧美做受高潮1| 国产视频精品自拍| 中日韩午夜理伦电影免费| 国产精品一区二区电影| 亚洲一区二区三区乱码aⅴ| 欧美激情亚洲一区| 狠狠躁夜夜躁人人躁婷婷91| 不卡av在线网站| 欧美伊久线香蕉线新在线| 日韩欧美中文免费| 国产欧美精品一区二区| 国产成人精品av在线| 黑人精品xxx一区一二区| 18一19gay欧美视频网站| 91国产视频在线播放| 日韩电视剧在线观看免费网站| 91黄色8090| 日韩av在线直播| 亚洲韩国日本中文字幕| 色先锋久久影院av| 日韩午夜在线视频| 亚洲欧美999| 91在线高清视频| 午夜精品久久久久久久久久久久| 91精品国产高清久久久久久久久| 一区二区三区动漫| 色www亚洲国产张柏芝| 国产在线观看精品一区二区三区| 国产欧美精品在线| 日韩在线小视频| 久久精品国产欧美亚洲人人爽| 亚洲成人激情小说| 国产精品亚洲第一区| 中文字幕视频一区二区在线有码| 国产精品69精品一区二区三区| 日韩小视频网址| 亚洲一区二区三区乱码aⅴ| 欧美成人精品在线| 日韩成人av在线播放| 精品香蕉在线观看视频一| 亚洲成色www8888| 国产精品福利小视频| 日本成人精品在线| 日本精品免费一区二区三区| 日韩福利在线播放| 欧美黑人又粗大| 日本国产高清不卡| 亚洲最新av在线| 国产精品视频精品视频| 成人黄色av免费在线观看| 成人精品视频在线| 亚洲国产婷婷香蕉久久久久久| 7m第一福利500精品视频| 国产精品爽爽爽| 热99精品只有里视频精品| 亚洲激情视频在线观看| 国产一区二区三区四区福利| 国产精品久久久久久久久久新婚| 亚洲欧美日韩另类| 精品视频在线播放色网色视频| 欧美日韩成人在线观看| 日韩欧美精品网址| 午夜精品福利在线观看| 日韩专区中文字幕|