創作內容

0 GP

【寫程式教學(?)】新手篇5-c/c++簡單教你動態配置記憶體

作者:♙♲⚙\~O_O~/⚙♲♙│2017-04-07 22:09:48│巴幣:0│人氣:433
簡單教就真的教得很簡單(?)
沒有calloc, realloc



C: malloc,free 搭配 sizeof
malloc可傳入一個參數, 意義是"要配幾個bytes",
回傳形態是void*[註1], 需要轉型,其值為配得的位址, 但若為NULL則代表配置失敗
free可傳入一個參數, 意義是要釋放的位址
sizeof用於回傳大小(單位是byte), 可以填型態名(如sizeof(int); sizeof(char) ), 可以是變數( int n; sizeof(n); int array[9]; sizeof(array); int *ptr; sizeof(ptr); )

使用大致如下:
int arraySize,*array;
printf("想要配置多大的int陣列?");
scanf("%d",&arraySize);
array=(int*)malloc(sizeof(int)*arraySize);
if(array==NULL) printf("fail\n");
else printf("success\n");
free(array);

有興趣的話可以看一下sizeof(array)是多少,和直接宣告陣列的(例如int array[9];)有什麼不同


C++: new, delete
單個
new 形態
delete 某個指標
陣列
new 形態[數量]
delete [] 某個指標

使用大致如下:
int arraySize,*array;
printf("想要配置多大的int陣列?");
scanf("%d",&arraySize);
array=new int[arraySize];
if(array==NULL) printf("fail\n");
else printf("success\n");
delete [] array;

然後,想要更開心動態配置可使用std::vector

C++: std::vector
首先你要 #include <vector>
std::vector<型態> 變數名稱;
std::vector<型態> 變數名稱(長度);
std::vector.resize(長度);
(不想打 std:: 可於前打上 using namespace std; )

使用大致如下:
#include <vector>
int arraySize;
std::vector<int> v;
printf("想要配置多大的int陣列?");
scanf("%d",&arraySize);
v.resize(arraySize);
/* 我功力不足不知道失敗會怎樣,不過我想應該可用try...catch擋吧(?) */
/* 同時他還有.size()可以看現在的長度 */
printf("%u\n",(unsigned)v.size());

註1. 任何指標可以轉void*
其他附註:
1. 為避免卡在中文字串編譯, 如確定不能編譯中文字串, 請自行改成英文
2. malloc/new完不需要了記得要free/delete 不然程式把記憶體吃完你會很煩(?)


沒了?沒錯不要懷疑,這裡的"簡單"指的是內容很少,你可以把code消掉看看剩幾行?

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3536884
Some rights reserved. 姓名標示-非商業性 2.5 台灣

相關創作

同標籤作品搜尋:寫程式|新手|C|C++|教學

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★agold404 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【寫程式教學(?)】新手... 後一篇:【筆記】c/c++輸入備...

追蹤私訊切換新版閱覽

作品資料夾

jason990505各位巴友
歡迎各位巴友來我小屋觀看小說及文章 或單純交流認識!看更多我要大聲說9小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】