- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
指标就是记录变数位址的工具
動態配置一般變數 動態配置變數的方式如下,如果n=1,即表示一個變數: 7-5 動態配置記憶體 資料型態* 指標名稱=(資料型態*)malloc(sizeof(資料型態)*n); 範例CH07_18.c 7-5 動態配置記憶體 執行結果 程式解說 第6行宣告浮點數指標piF,並將指標指向浮點數動態配置記憶空間。 第8行自行輸入piVal的值。 第12行輸出piF所指向的位址內容。第14行將指標piF的空間釋放。 7-5 動態配置記憶體 動態配置一維陣列 通常各位將資料宣告為陣列時,必須於編譯階段即確定陣列長度,但這樣很容易產生記憶體的浪費或無法滿足程式所需。這時就可採用動態配置陣列的方式。例如動態配置一維陣列的方式如下,n=陣列長度: 7-5 動態配置記憶體 資料型態* 指標名稱=(資料型態*)malloc(n*sizeof(資料型態)); 動態配置一維陣列 當執行時期動態配置的一維陣列不需要時,可以將其釋放,釋放動態配置的一維陣列的方式如下: 例如依整數資料型態動態配置一個長度為8個元素的連續整數陣列記憶體空間,如下所示: 7-5 動態配置記憶體 free(指標名稱); int* piArrVal=(int*)malloc(8*sizeof(int)); /*指標變數指向動態配置的記憶空間*/ … free(piArrVal); /*釋放此陣列的記憶體*/ 範例CH07_19.c 7-5 動態配置記憶體 範例CH07_19.c 7-5 動態配置記憶體 執行結果 程式解說 第6行宣告學生成績陣列指標grades。 第12行請輸入欲產生的動態一維陣列個數n。 第13行將整數指標指向動態配置一維陣列記憶空間。 第18~22行利用for迴圈輸入學生成績,並於第21行利用sum變數累加成績。 第31行釋放指標指向的記憶空間。 7-5 動態配置記憶體 範例 CH07_20.c 7-5 動態配置記憶體 執行結果 7-5 動態配置記憶體 程式解說 第7行宣告動態陣列指標。 第10行動態宣告5個整數元素的陣列。 第15行透過 sizeof ()函數來針對靜態陣列取得陣列大小資訊。 第16行透過 sizeof ()函數來針對動態陣列取得陣列大小資訊。 第20行透過dynamic_array++ 的運算,便可以獲得與 dynamic+1 相同的效果,並能針對 dynamic_array 所指向之位址遞增,其遞增量仍是該陣列之單位元素大小,也就是 4 個位元組。 7-5 動態配置記憶體 動態配置字串 字串其實就是字元陣列,若在程式執行時無法得知字串長度,也就是字元陣列元素個數的話,也可以使用動態陣列進行字串的配置。 當以動態指標配置一維整數陣列時,並無法以 sizeof ()函數來求得該陣列之大小。不過對於字串而言,卻可以使用 strlen 函數取得字串之長度。相關格式如下: 7-5 動態配置記憶體 範例CH07_21.c 7-5 動態配置記憶體 執行結果 程式解說 第3行使用到strlen()函數,因此要含括string.h檔。 第12行i+1字元是為了要將字串的結尾字元 ‘\0’ 加入到字串最後。 第18行利用strlen()函數求出此動字串的長度。 7-5 動態配置記憶體 動態配置多維陣列 動態配置多維陣列與一維陣列的宣告方式類似,差異點在於多維陣列需要由第一維逐一配置記憶體至第n維。 例如宣告一個n*m的二維陣列動態配置記憶體,就可以利用雙重指標來配置第一維部份的記憶體,方式如下: 7-5 動態配置記憶體 資料型態** 指標名稱=(資料型態**)malloc(陣列長度n*sizeof(資料型態*)); 動態配置多維陣列 在配置動態一維整數陣列時,使用的是「指向整數的指標」。現在配置二維陣列時,可以將二維陣列看成有「多個一維整數陣列」,因此,需要一個「指向『整數指標』的指標」來達成。方式如下: 7-5 動態配置記憶體 指標名稱[0]=(資料型態*)malloc(m*sizeof(資料型態)); 指標名稱[1]=(資料型態*)malloc(m*sizeof(資料型態)); 指標名稱[2]=(資料型態*)malloc(m*sizeof(資料型態)); … 指標名稱[m-1]=(資料型態*)malloc(m*sizeof(資料型態)); 範例CH07_22.c 7-5 動態配置記憶體 範例CH07_22.c 7-5 動態配置記憶體 執行結果 程式解說
文档评论(0)