C語言編程技巧:以實例跟我學動態數組的創建及使用方法

2021-01-09 編碼那些事

問題提出

在C語言編程中,對於普通數組的定義,如定義一個包含10個int類型元素的一維數組a,我們採用下面的方式:

int a[10];

這種方式定義的數組是靜態數組,其特點是定義方便,無需管理其內存的佔用情況,但其缺點是一旦定義後,其數組的長度就固定了,而不能動態的改變其大小。

但是,在很多情況下,數組元素的個數我們是無法事先確定的。如定義一個數組,用來存儲給定的已知數組中所有大於3的元素,很明顯,這個數組的大小是不確定的,用靜態數組的定義方式是不合適的,除非你定義的數組大小足夠大,能包括足夠多的元素,但這樣會造成內存的浪費。所以,這種場合下動態數組就派上用場了。

在C語言中提供了諸如內存的申請、釋放等管理函數,然後結合指針可以按需動態地分配內存空間,來構建動態數組,達到有效利用計算機內存資源的手段。

基本函數說明

C語言中用於動態數組操作的函數主要包括malloc、calloc、realloc和free等,每個函數的原型、參數意義及功能說明如下表所示:

下面通過一個例子演示動態數組的創建及使用方法。

例子說明

編寫一個控制臺程序,能夠創建包含n個元素的動態數組,其n值由用戶輸入,數組裡面存儲的內容是n個0-9之間的隨機數。可以通過輸入不同的n值反覆創建不同個數的動態數組,當n值輸入小於等於0的數值時,程序退出。

C語言實現代碼

完整的C語言實現代碼如下:

代碼簡要解釋如下:

第9行,定義一個指向int型的指針p,其對應的內存空間用以存儲動態數組的元素。

第13-14行,輸入動態數組的元素個數,存儲到變量n中。

第16行,使用malloc函數申請能包含n個元素(n*4個字節)的地址空間,將返回的void型指針強制轉換為指向int型的指針賦予p。

第19-22行,為動態數組中的每個元素賦值(0-9之間的隨機數)。

第25-29行,在控制臺上列印動態數組中的每個元素。

第31-36行,使用free函數釋放動態內存。

程序運行結果如下圖所示:

總結

C語言中關於動態數組的編程,需要注意的是,在動態數組使用完畢後,不要忘記使用free函數將動態申請的內存釋放,否則會造成內存洩露。

如果你覺得這篇文章對你有用的話,請不要忘記點讚哦。

相關焦點

  • C語言編程技巧:跟我學如何定義及使用一個字符串數組
    實現目的我們在用C語言編寫程序時,經常會遇到使用字符串數組的情況,這種數組的特點是, 數組中的每個元素都是一個字符串,但每個字符串的長度卻不相同。如果你使用C++語言進行編程的話,實現起來相對比較簡單,只需直接選擇標準模板庫的字符串string類,在代碼中定義該類的一個數組即可實現。現在的問題是,在純C語言中如何定義這樣的一個字符串數組呢?如對於下面的一個字符串數組:str = {「I love C.」,「I love C++.」,「I love JAVA.」
  • [探討]如何創建比C語言更快的程式語言?
    單從程式語言特性來判斷,雖然Fortran語言也以快而著稱,但開發者們還是將C語言稱之為領導者。開發者創建新一門語言通常以C語言為參照對象,將語言編譯時間與C語言進行對比,會因比C語言慢多少而引以自傲。然而,很少有語言能夠擊敗C。那麼,什麼樣的語言才能比C更快呢?
  • 編程C語言進階篇——構造類型:數組
    在c語言的實際應用中,我們常常需要同時對多個數據進行處理,如果沒有專門批量處理數據的方法,就會給我們的程序編寫造成巨大的影響。而這種批量處理數據的方法就是我們這次的主題——數組。一、數組是什麼在c語言中,數組是用來處理一系列相同類型元素的集合。所謂數組,就是用一個統一的名字代表這批數據,而用序號或下標區分各個數據。 這就是數組的定義。
  • 嵌入式開發-C語言-指針與數組
    1、指針與數組-掌握在C語言中數組的指針:是指數組在內存中的起始地址,數組元素的地址:是指數組元素在內存中的起始地址一維數組的數組名為一維數組的指針(起始地址)例:double x[8];因些,x為x數組的起始地址
  • 優秀程式設計師通過簡單代碼,窺探電腦編程中強大的數組操作功能
    優秀程式設計師通過簡單代碼,窺探電腦編程中強大的數組操作功能。程式語言中,數組是一個非常重要的概念,也是一種很常用的類型。本文中通過javascript語言的代碼實例,展現編程中數組的魅力。在javascript語言中,數組Array類型是一種引用類型,可以保存任何數據類型的數據。如字符串,數值,對象等。
  • C語言編程核心要點
    類型C是強類型語言,有short、long、int、char、float、double等build-in數據類型,類型是貫穿c語言整個課程的核心概念。數組是靜態的,在定義的時候,數組的長度就已經確認,運行中無法伸縮,所以有時候我們不得不為應付擴充多分配一些空間。數組元素不管用多用少,它都在哪裡,有時候,我們會用一個int n去界定數組實際被使用的元素個數。
  • VBA中動態數組的創建及利用
    今日繼續和大家分享VBA編程中常用的常用「積木」過程代碼。這些內容大多是我的經驗的記錄,來源於我多年的經驗。今日分享的是NO.244,內容是:VBA過程代碼244:VBA中動態數組的定義及創建VBA過程代碼244:VBA中動態數組的定義及創建Sub Mynz()Dim arr() As Stringerow = [c65536].End(3).Row '最後一個非空單元格行號j = 1 '數組索引號
  • R語言中數組的使用
    在R語言中,可以認為數組是矩陣的擴展,它將矩陣擴展到2維以上。如果給定的數組是1維的則相當於向量,2維的相當於矩陣。R語言中的數組元素的類型也是單一的,可以是數值型,邏輯型,字符型或複數型等。數組的創建在R語言中,數組使用array()函數創建。
  • C語言編程實例:一鍵清空目標文件夾|整人小程序
    前言今天的文章跟大家講一下,C語言中的文件操作——遍歷文件夾和刪除文件,以及如何應用這兩個技能來寫一個有趣的小程序,這篇文章涉及的知識點很少,也很簡單,所以這篇文章就當做給小白們的小教程吧,讓你們每天都能充滿激情地學習編程,擺脫學習C語言枯燥乏味的過程。
  • 4個代碼塊教您如何在C中動態分配2D數組
    以下是在堆上創建2D數組(或動態分配2D數組)的不同方法。>我們可以創建大小為r的指針數組。請注意,從C99開始,C語言允許使用可變大小的數組。創建指針數組後,我們可以為每行動態分配內存。]); return 0; } 3.使用指向指針的指針我們還可以使用雙指針動態創建指針數組。
  • C 語言簡單編程速成
    在創建了一個經久不衰的作業系統(至今仍在使用)之後,他需要一種好的方法來對這些 Unix 計算機編程,以便它們可用執行新的任務。在現在看來,這很奇怪,但在當時,程式語言相對較少,Fortran、Lisp、 Algol 以及 B 語言都很流行,但是,對于貝爾實驗室的研究員們想要做的事情來說,它們還是遠遠不夠的。丹尼斯·裡奇表現出一種後來被稱為程式設計師的主要特徵的特質:創造了他自己的解決方案。
  • 使用JavaScript對象數組進行函數式編程
    在日常使用中,我們通常需要使用這些方法來處理數據對象的數組,這是文檔中缺乏的場景。另外,這些操作符經常被用功能性語言來看,並為JavaScript帶來了一種新的透視功能,即通過具有功能性觸摸的對象進行迭代。在這篇文章中,我們將打破使用的幾個例子map,reduce和filter操作對象的數組。通過這些例子,我們將學習這些方法的強大程度,同時了解它們與函數式編程的關係。
  • C/C++編程筆記:C數組、字符串常量和指針!三分鐘弄懂它
    想弄懂C語言中數組和指針的關係嗎?這篇文章就佔據你三分鐘時間,看完你肯定會有收穫! 數組 數組聲明為 數據類型 名稱[ constant-size ],並將一個數據類型的一個或多個實例分組到一個可尋址的位置
  • 加速程序開發 Python整合C語言模塊
    而作為軟體開發的傳統程式語言——C語言,卻能在這些問題上很好地彌補Python語言的不足。因此,本文通過實例研究如何在Python程序中整合既有的C語言模塊,包括用C語言編寫的源程序和動態連結庫等,從而充分發揮Python語言和C語言各自的優勢。Python語言的特點Python作為一門程序開發語言,被越來越多地運用到快速程序開發。
  • C語言知識梳理
    &include <stdio.h>//來源公眾號:C語言與CPP編程int getPeachNumber(int n) //這裡要定義n,要不編譯器會報錯!12.1.生存周期劃分存儲方式C語言根據變量的生存周期來劃分,可以分為靜態存儲方式和動態存儲方式。靜態存儲方式:是指在程序運行期間分配固定的存儲空間的方式。靜態存儲區中存放了在整個程序執行過程中都存在的變量,如全局變量。動態存儲方式:是指在程序運行期間根據需要進行動態的分配存儲空間的方式。
  • 這裡20個C語言編程的核心要點你掌握嗎?
    因為C語言簡單且強大,是個不錯的選擇。 C語言作為編程的入門語言,學習者如何快速掌握其核心知識點,面對茫茫書海,似乎有點迷茫。為了讓各位快速地掌握C語言的知識內容,在這裡對相關的知識點進行了歸納。指針的含義遠比上述豐富,指針跟數組結合便有了指針數組(int* p[n])和數組指針(int (*p)[n]),指針跟函數結合便有了函數指針(ret_type (*pf)(param list)),指針跟const結合便有了const char*/char* const/const char* const,還有指向指針的指針(int
  • TIOBE8月程式語言排行榜:C語言蟬聯第一,R語言成黑馬
    全書共18章,覆蓋了數據、語句、操作符和表達式、指針、函數、數組、字符串、結構和聯合等幾乎所有重要的C編程話題。書中給出了很多編程技巧和提示,每章後面有針對性很強的練習,附錄部分則給出了部分練習的解答。
  • Java二維數組和動態數組ArrayList 類
    Java二維數組Java 語言中提供的數組是用來存儲固定大小的同類型元素//遍歷二維數組public class Traverse_a_two_dimensional_array { public static void main(String[] args) { int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};//靜態創建 //遍歷數組的第一個方法 for(int i = 0;i < arr.length;i++){
  • 你所不知道的C語言經典九大編程實例思想
    獲取更多精彩文章請關注云主宰蒼穹引言:對於學習計算機程式語言而言,一門程式語言的經典思想是十分重要的。這是一門計算機程式語言的特色優點,是其解決問題的經典思維。你所了解的C語言,有哪些經典的編程實例思想,歡迎下方留言交流!
  • 四大對象創建方法,構建javascript語言面向對象的編程基礎
    四大對象創建方法,構建javascript語言面向對象的編程基礎。傳統意義上的面向對象編程,是基於類的概念的,所有的對象都是從類發展過來,對象就是類的實例,並且具有相應類的所有方法與屬性。但是,javascript語言並沒有類的概念。