快速上手系列-C語言之數組

2021-01-15 濁酒敬風塵

我們需要表示某個班級學生的年齡,比如,張三今年3歲,李四今年80歲,很顯然,我們可以用C語言中的某個數據類型來表示,比如int型:int age_zhangsan = 3; int age_lisi = 80; 那如果這個班級有50個同學,我們是不是需要定義50個變量來存放每個同學的年齡呢,當然可以,但是這麼做真的很不合理。類似這樣的問題,用數組就很好解決,同樣的問題我們可以用 int ages[50]; 來表示,簡單明了。

繼上一篇《快速上手系列-C語言之基礎篇(二)》寫數據類型和運算符相關內容之後,這裡簡單介紹一下C語言中非常常用的一種數據結構,即數組。

數組的基本概念:

1、在程序設計中,為了方便處理數據,把具有相同類型的若干變量按有序的形式組織起來,這些按序排列的相同類型數據元素的集合稱為數組。數組往往被認為是一系列相同類型的變量,就像你去擼串兒,有羊肉串,有豬肉大串,也有串土豆片的等等,但很少有一串上既給你串了土豆又串了羊肉的,因為它們不是一個類型的,價格不一樣串在一起不好算錢不是。

2、在C語言中,數組屬於構造數據類型

一個數組可以分解為多個數組元素,這些數組元素可以是基本數據類型或構造類型.按數組元素類型的不同,數組可分為數值數組、字符數組、指針數組、結構體數組等類別int a[10] = {1, 2, 3, 4, 5, 6}; //一維數組,整型數組a,有10個元素int b[4][2]={ {1, 2}, {3, 4}, {5, 6}, {7, 8} }; //二維數組,有四個元素,每個元素都是一個一維數組char buf[5] = {『a』,』b』,』c』}; //字符數組struct student stus[5]; //結構體數組char buf[6] = {「hello」};char *q[10] = {&a[0], &a[1], &a[2]};char (*q)[10] = &a;

一維數組:

1、一維數組:

同一個數組,所有元素的數據類型是相同的.數組名的書寫規則應符合標識符的書寫規定.數組名不能與其它變量名相同,以下是錯誤的:void main( ){int num;float num[10];}方括號中常量表達式表示數組元素的個數;如a[3]表示數組a有3個元素,其下標從0開始計算,因此3個元素分別為a[0],a[1],a[2]不能在方括號中用變量來表示元素的個數,但是可以是符號常數或常量表達式,例如:#define NUM 5void main( ){int n = 10;int a[n]; //錯誤int a[3+2],int a[2+NUM];}

2、一維數組的初始化:

在定義數組的同時對其進行賦值,稱為初始化可以只給部分元素賦初值當{ }中數值少於元素個數時,只給前面部分元素賦值例如:int a[10]={0, 1, 2, 3, 4}; 只給a[0]~a[4]5個元素賦值,後5個元素自動賦0隻能給元素逐個賦值,不能給數組整體賦值例如:給5個元素全部賦1值正確:int a[5]={1,1,1,1,1};錯誤:int a[5]=1;給全部元素賦值時,可以不給出數組元素的個數例如: int a[5]={1,2,3,4,5};可寫為: int a[ ]={1,2,3,4,5};注意:全局數組若不初始化,編譯器將其初始化為零,局部數組若不初始化,內容為隨機值;

3、一維數組的引用:

數組元素也是一種變量,其標識方法為數組名後跟一個下標,在C語言中只能逐個地使用下標變量,而不能一次引用整個數組:

二維數組

1、二維數組(在邏輯上二維數組是矩陣)

數組若只有一個下標,稱為一維數組,其數組元素也稱為單下標變量;在實際問題中有很多量是二維的或多維的,例如代數中的矩陣、生產中的報表;因此C語言允許構造多維數組;多維數組元素有多個下標,以標識它在數組中的位置,所以也稱為多下標變量;多維數組可由二維數組類推而得到

2、二維數組的定義

int a[3][4];定義了一個三行四列的數組,數組名為a,其元素類型為整型;該數組的元素個數為3×4個,即:a[0][0], a[0][1], a[0][2], a[0][3]a[1][0], a[1][1], a[1][2], a[1][3]a[2][0], a[2][1], a[2][2], a[2][3]二維數組在概念上是二維的,即其下標在兩個方向上變化。實際的硬體存儲器卻是連續編址的,也就是說存儲單元是按線性排列的,即放完一行之後順次放入第二行。

3、二維數組的初始化

例如:數組a[2][3]按行分段賦值可寫為:int a[2][3]={ {80, 75, 92}, {61, 65, 71} };按行連續賦值可寫為:int a[2][3]={ 80, 75, 92, 61, 65, 71 };

4、二維數組的引用:

比如我們定義一個2行3列的二維數組 a[2][3]; 分別按列和按行列印出每個元素:

按列列印
按行列印

字符數組:

1、字符數組的定義:

初始化賦值的時候可以不給定數組的大小,如char buf[6]="hello"; 可以寫成char buf[]="hello";

char buf1[] = {'h', 'e', 'l', 'l', 'o'}; //沒有'\0'char buf2[] = 「hello"; //有'\0'

註:這裡需要注意一下,使用printf列印buf1和buf2,列印出現這種結果是因為printf遇到『\0』結束。buf2含有'\0',使用printf列印遇到結束符'\0'就會結束,列印結果正常。而buf1沒有'\0',輸出hello後會繼續輸出內存中的數據,直到遇到結束符'\0'為止。

char a[][6] = { //一定要給出列數 {『h』,』e』,』l』,』l』,』o』}, {『a』,』b』,』c』,』d』,』e』} };char a[][6] = { 「hello」 , 「world」 }

2、字符數組的引用:

用字符串方式賦值比用字符逐個賦值要多佔1個字節,用於存放字符串結束標誌『\0』;註:'\0'是由C編譯系統自動加上的

如char buf[] = "hello"; 數組buf在內存中的實際存放情況為:'h', 'e', 'l', 'l', 'o', '\0';

這篇內容暫且就寫這麼多吧,下篇簡單寫寫C語言函數方面相關內容,想了解的夥伴們可以隨時關注。

相關焦點

  • Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞
    詳細細節請參考:python使用ctypes模塊調用DLL函數之傳遞數值、指針與字符串參數、Python使用ctypes模塊調用DLL函數之傳遞結構體參數這次講一下在Python中使用ctypes模塊調用DLL中的庫函數傳遞數組參數的情況。
  • 快速上手系列-C語言之字符串處理函數(一)
    C語言中常用的字符串操作函數,有比如計算字符串長度、字符串拷貝,字符串比較等這樣的整體操作函數,有字符串查詢函數,也有字符串轉換函數等等,這裡先介紹字符串整體操作函數。2、strcpy / strncpy1、strcpy原型:char *strcpy( char *dest, const char *src )功能:把src所指向的以 '\0'結尾的字符串複製到dest所指向的數組中
  • 單片機的C語言中數組的用法
    數組是由具有相同類型的數據元素組成的有序集合。數組是由數組名來表示的,數組中的數據由特定的下標來唯一確定。引入數組的目的,是使用一塊連續的內存空間存儲多個類型相同的數據,以解決一批相關數據的存儲問題。數組與普通變量一樣,也必須先定義,後使用。數組在C51語言的地位舉足輕重,因此深入地了解數組是很有必要的。
  • c語言結構體數組初始化
    有關結構體數組初始化的問題struct _m_usmart_nametab usmart_nametab[]=本文引用地址:http://www.eepw.com.cn/article/201611/322298.htm{#if USMART_USE_WRFUNS==1 //如果使能了讀寫操作(void
  • 定義只有一個數組成員的C語言結構體有什麼用?
    方便的數組值傳遞看過我之前文章的讀者應該明白,調用C語言函數時,如果將數組作為參數傳遞給函數,那麼在被調用函數內部,數組常常會退化成指針。C語言代碼示例編譯並執行上述C語言代碼,得到如下輸出:# gcc t.c# .
  • 快速上手系列-C語言之基礎篇(一)
    按照之前的計劃,這篇文章本該寫C語言簡介,包括一些歷史背景,發展狀況, 語言特點什麼的,這些東西著實比較囉嗦。吃飯用的筷子,到現在我都不知道它的由來,不知道它是在什麼歷史背景下誕生的有些東西還是有必要了解一下,比如,C語言所產生的代碼運行速度比彙編語言編寫的代碼運行速度稍慢一點,但還是有得一拼,同時C語言要比彙編語言編寫的代碼可讀性高,可移植性好。
  • C語言程序設計試題及答案
    A) 'a'&&'b' B) a<=b C) a||b+c&&b-c D) !((a<b)&&!c||1)14、設有數組定義:char array[]=「student」;則數組所佔的存貯空間為( )。
  • Python數據分析類庫系列-Numpy之多維數組ndarray
    NumPy之於數值計算特別重要的原因之一,是因為它可以高效處理大數組的數據。 這是因為: NumPy是在一個連續的內存塊中存儲數據,獨立於其他Python內置對象。NumPy的C語言編寫的算法庫可以操作內存,而不必進行類型檢查或其它前期工作。
  • C語言編程技巧:以實例跟我學動態數組的創建及使用方法
    問題提出在C語言編程中,對於普通數組的定義,如定義一個包含10個int類型元素的一維數組a,我們採用下面的方式:int a[10];這種方式定義的數組是靜態數組,其特點是定義方便,無需管理其內存的佔用情況,但其缺點是一旦定義後,其數組的長度就固定了,而不能動態的改變其大小
  • R語言筆記1:數據類型(向量、數組、矩陣、 列表和數據框)
    學習R語言,需要先安裝R語言,只需要從 https://www.r-project.org/ 下載適合你系統的最新版本軟體安裝即可。R語言有個優秀的環境叫Rstudio,具體安裝可參考  《R語言學習 - 入門環境Rstudio》一文。R語言中的數據類型(Data Types)R語言的對象(Objects)主要包括向量、矩陣、數組、數據框和列表。
  • 自考「C語言程序設計」模擬試題十一
    「c」    B.『\\』『    C.』W『   D. 』『  14.若有代數式3ae/bc,則不正確的c語言表達式是(     )  A.a/b/c*e*3    B.3*a*e/b/c    C.3*a*e/b*c    D.a*e/c/c*3  15.在C語言中,要求運算數必須是整型的運算符是(   )  A./    B.++   C
  • C語言編程技巧:跟我學如何定義及使用一個字符串數組
    實現目的我們在用C語言編寫程序時,經常會遇到使用字符串數組的情況,這種數組的特點是, 數組中的每個元素都是一個字符串,但每個字符串的長度卻不相同。如果你使用C++語言進行編程的話,實現起來相對比較簡單,只需直接選擇標準模板庫的字符串string類,在代碼中定義該類的一個數組即可實現。現在的問題是,在純C語言中如何定義這樣的一個字符串數組呢?如對於下面的一個字符串數組:str = {「I love C.」,「I love C++.」,「I love JAVA.」
  • Python使用ctypes模塊調用DLL函數之複數數組的參數傳遞
    引言前段時間在作信號分析處理方面的項目時,需要將時域數據通過快速傅立葉變換(FFT)轉換到頻域以便作進一步的後續處理,由於涉及到實時運算速度方面的要求,需要考慮程序算法的運算性能問題,因此,信號處理算法是在C語言裡面完成的,然後將算法的實現函數封裝到動態連結庫(DLL)文件中,最後在
  • 第三篇:C語言中數組與變量的不同,一個更好用的存儲空間
    在程式語言中,有一個非常核心的概念「變量」。雖然變量中保存的數據可以發生變化,但還是存在著一定的局限性。比如:當要保存一個班多個學員的成績。雖然使用變量可以實現,但操作起來非常繁瑣,特別是當學生的人數越來越多的時候。
  • 如何獲取numpy數組的真實地址?如何與ctypes數組共享內存?
    在Python中,當你定義了一個numpy類型的數組後,它內部元素的真實地址如何獲得呢?這裡可以通過numpy數組的「__array_interface__」接口得到。__array_interface__['data'])上面程序定義了一個numpy類型的數組a,運行後得到:(1883707159072, False)接口「__array_interface__」返回一個包含兩個元素的元組,其第1個元素即為a數組內部元素存放的真實地址,第2個元素標明了該數組是否為「只讀」屬性。
  • C語言程序設計試題與答案B卷
    每小題1分,共20分)1、一個C語言程序是由( )。A)3 B)4 C)5 D)08、設int a[ ]={1,2,3,4,5},*p=a; 則數組元素的正確表示是(   )。
  • C語言編程技巧:控制臺程序中自定義函數實現數組內容的特定顯示
    在用C語言編寫算法調試方面的程序中,經常會遇到這種情況,在不同地方需要對處理後的數組內容多次進行顯示,並且很多情況下並非顯示數組裡面的全部內容,而僅僅是想觀察數組中的部分數據內容,若每次顯示時都用printf函數寫的話,未免太過麻煩了。
  • 計算機二級考試C語言高頻考點
    (2)源程序的擴展名為.c,目標程序的擴展名為.obi,可執行程序的擴展名為.exe。for語句22.6數組(1)一般形式為:for(表達式1;表達式2;表達式3)二維數組的定義和引用二維數組的定義>在C語言中,二維數組中元素排列的順序了測定字符串的實際長度,C語言規定了一個字符是:按行存放,即在內存中先順序存放第一行的元素,串結束標誌,以字符10代表,就是說,在遇到字符再存放第二行的元素。
  • C語言基礎教學檔案!編號零零肆
    C語言令牌每個C程序都是一組指令,每個指令都是一些單獨的單元的集合。每個最小的單個AC程序單元稱為令牌。AC程序(用來定義電腦程式的形式語言)中的每條指令都是令牌的集合。令牌用於構建c程序,它們被稱為AC程序的基本構建塊。
  • 「C語言從入門到入土」必備C語言基礎筆記整理
    一、C語言1、什麼是C語言?C語言是人寫機器看的一種語言。C語言是高級語言中的低級語言。C語言貼近硬體。C語言的入門學習比較簡單。彙編語言——>B語言——>C語言2、C語言的特性首先C語言就是你的女朋友。無論你讓它幹什麼,它絕對不會自己找到方法。