第三篇:C語言中數組與變量的不同,一個更好用的存儲空間

2021-01-15 向陽花開滿山紅

在程式語言中,有一個非常核心的概念「變量」。雖然變量中保存的數據可以發生變化,但還是存在著一定的局限性。

比如:當要保存一個班多個學員的成績。雖然使用變量可以實現,但操作起來非常繁瑣,特別是當學生的人數越來越多的時候。

有沒有一種更大的容器,可以一次性存儲多個數據,而且只需要一個變量名就可以解決問題?

01數組概述

1、概念

沒錯,這個變量就是數組。下一個嚴謹的定義就是:一組類型相同的有序的數據集合。從定義中可以挖掘出數組兩大的特點:

類型相同。在C語言中,數組元素的類型必須保持一致。有序。數組元素之間是彼此挨在一起的,類似火車車廂,一節節連在一起。

2、集合(擴展內容)

集合與數組很像,但又是兩個不同的東西。數組聲明時必須確定長度,而且一旦申請成功,其長度(大小)不可更改。

而集合類似於動態數組,其長度(大小)可以自動伸縮(像氣球一樣,可大可小),但集合中的元素類型可以不同。

說明:C語言中沒有集合,在Java、C#等程式語言中存在集合的應用。

3、相關術語(類比班級)

數組名: 類似於班級名稱。表示不同於其他班級,如:高二(一)班。

數組元素:類似於班級的每一位學員。在現實生活中,每一位學員其實都是有姓名的;而在數組中的元素單個是沒有名稱的,只有一個統一的數組名。

數組長度(或大小):類似於班級的總人數。如:該班級50名學員,則數組長度(或大小)即為50。

索引下標:數組元素既然沒有名稱,如何獲取某個特定的數組元素呢?

相關焦點

  • 單片機的C語言中數組的用法
    數組是由具有相同類型的數據元素組成的有序集合。數組是由數組名來表示的,數組中的數據由特定的下標來唯一確定。引入數組的目的,是使用一塊連續的內存空間存儲多個類型相同的數據,以解決一批相關數據的存儲問題。數組與普通變量一樣,也必須先定義,後使用。數組在C51語言的地位舉足輕重,因此深入地了解數組是很有必要的。
  • 快速上手系列-C語言之數組
    我們需要表示某個班級學生的年齡,比如,張三今年3歲,李四今年80歲,很顯然,我們可以用C語言中的某個數據類型來表示,比如int型:int age_zhangsan = 3; int age_lisi = 80; 那如果這個班級有50個同學,我們是不是需要定義50個變量來存放每個同學的年齡呢,當然可以,但是這麼做真的很不合理。
  • c語言中malloc申請的空間和直接定義變量申請的空間有什麼區別?
    根據以前的編程經驗,要點有三點:一是空間分配的連續性;二是動態內存申請;三是防止程序執行中出現異常錯誤。以下分別說明。直接定義變量與malloc定義變量的編程含義;malloc事先分配好了內存空間。在c語言中,malloc函數原型為void*malloc(unsignedintslong),其作用是在內存的動態存儲區中分配一個長度為slong的連續空間。
  • C語言編程技巧:以實例跟我學動態數組的創建及使用方法
    但是,在很多情況下,數組元素的個數我們是無法事先確定的。如定義一個數組,用來存儲給定的已知數組中所有大於3的元素,很明顯,這個數組的大小是不確定的,用靜態數組的定義方式是不合適的,除非你定義的數組大小足夠大,能包括足夠多的元素,但這樣會造成內存的浪費。所以,這種場合下動態數組就派上用場了。
  • Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞
    前面兩篇已經講了傳遞數值/指針/字符串參數、傳遞結構體參數的例子,大家可以回看一下,這樣可以更好的理解本次要講的內容。詳細細節請參考:python使用ctypes模塊調用DLL函數之傳遞數值、指針與字符串參數、Python使用ctypes模塊調用DLL函數之傳遞結構體參數這次講一下在Python中使用ctypes模塊調用DLL中的庫函數傳遞數組參數的情況。
  • 51單片機基礎剖析(基於C語言)
    但是本人在Keil uV3中遇到並非如此的案例。在預設的情況下默認為有符號。要注意一下,或許不同的編譯器規則不同。所以我們在寫程序的時候,還是最好把unsigned signed加上。2.函數的參數和局部變量的存儲模式 C51 編譯器允許採用三種存儲器模式:SMALL,COMPACT 和LARGE。一個函數的存儲器模式確定了函數的參數的局部變量在內存中的地址空間。
  • 定義只有一個數組成員的C語言結構體有什麼用?
    在C語言程序開發中,有經驗的程式設計師有時會定義只有一個數組成員的結構體,雖然語法簡單,但是卻常常讓初學者感到迷惑:這麼做有什麼好處嗎?struct ABC {unsigned long array[MAX];} abc;
  • 第四篇:C語言中指針與字符串核心知識點梳理
    前面在講變量的時候,其中有一個特點就是變量的內存地址,即:變量在內存中實際的保存位置。這個內存地址如何獲取?它又有什麼意義?重點包括:指針處理一維數組、動態內存分配等。C語言的基本數據類型中有一個char的關鍵詞,可以存儲單個的字符。那麼,像漢字以及由多個字符組成的內容,又該如何存儲呢?這點將涉及到本文第二個核心知識點:字符串及其常規操作。重點包括:字符串處理函數、指針與字符串的關係等。
  • C/C+編程筆記:C語言編程面試常見問題,全是經典題!
    const變量是「不可修改的l值」。 「可修改的l值」表示可以修改的l值。 數組和指針有什麼區別? 指針用於存儲動態分配的數組的地址,以及用於作為參數傳遞給函數的數組。
  • C語言編程技巧:跟我學如何定義及使用一個字符串數組
    實現目的我們在用C語言編寫程序時,經常會遇到使用字符串數組的情況,這種數組的特點是, 數組中的每個元素都是一個字符串,但每個字符串的長度卻不相同。如果你使用C++語言進行編程的話,實現起來相對比較簡單,只需直接選擇標準模板庫的字符串string類,在代碼中定義該類的一個數組即可實現。現在的問題是,在純C語言中如何定義這樣的一個字符串數組呢?如對於下面的一個字符串數組:str = {「I love C.」,「I love C++.」,「I love JAVA.」
  • 計算機二級考試C語言高頻考點
    關係運算符的兩邊可以是C語言中任意合法的表達式scanf(格式控制,地址表列)(2)關係運算符的結果是一個整數值一0或其中,=(是函數名,「格式控制」的含義同pm)者非零」,用非零值來表示「真」,用零值來表示函數,「地址表列」由若干個變量地址組成既可以是「假」變量的地址,也可以是字符串的首地址
  • 嵌入式C中的結構是什麼?
    如果不同數據類型的變量之間存在連接怎麼辦?可以在程序中將這些變量視為一個組嗎?例如,假設需要指定生成上述語音 陣列的ADC的採樣率。可以定義一個浮點變量來存儲採樣率:float sample_rate;儘管變量voice和sample_rate彼此相關,但它們被定義為兩個獨立變量。
  • 自考「C語言程序設計」模擬試題十一
    &a+1    D  &a[0]  22.凡是函數中未指定存儲類別的局部變量,其隱含的存儲類別是(  )  A.auto     B.static    C.extern    D.register  23.若用數組名作為函數調用的實參,傳遞給形參的是(    )  A.數組的首地址          B.數組第一個元素的值
  • C語言,局部變量的指針,棧幀
    rsp的值保存到rbp裡,第三行通過把rsp往低地址移動,從而分配局部變量的內存。這時,rbp寄存器指向的是返回地址的下一個位置,即被調函數的棧低。因此,可以用rbp+對應的偏移量offset來訪問局部變量和實參。rsp可能會改變,例如在調用子函數時,所以一般都是用rbp作為標準來訪問局部變量。
  • C語言之const和volatile"究極"學習
    一、const的用法:1、const只讀變量:const修飾的變量是只讀的,本質上還是變量const修飾的局部變量在棧上分配空間const修飾的全局變量在全局數據區分配空間const只在編譯期有用,在運行期沒有用註:const修飾的變量不是真的常量,它只是告訴編譯器該變量不能出現在賦值符號的左邊
  • C語言程序設計試題及答案
    A) 程序行 B) 語句 C) 函數 D) 字符2、C語言規定,在一個源程序中main函數的位置( )。A) &(*x)   B) x C) *x D) &*x13、設a,b,c都是int型變量,且a=3,b=4,c=5,則下面的表達式中,值為0的表達式是( )。
  • 如何獲取numpy數組的真實地址?如何與ctypes數組共享內存?
    在Python編程中,numpy是一個很好用的擴展程序庫,將其與SciPy庫和 Matplotlib繪圖庫一起使用,可構成一個強大的類似於Matlab的科學計算環境,有助於我們通過 Python 學習數據科學或者機器學習。在Python中,當你定義了一個numpy類型的數組後,它內部元素的真實地址如何獲得呢?
  • C語言基礎教學檔案!編號零零肆
    C語言關鍵字由於每種語言都有構造語句的單詞,因此C編程還具有具有特定含義的單詞,用於構造c程序指令。在C程式語言中,關鍵字是具有預定義含義的特殊單詞。關鍵字在C程式語言中也稱為保留字。在C程式語言中,有32個關鍵字。所有32個關鍵字都有自己的含義,編譯器已經知道了。
  • C語言編程:以實例教你學指向函數的指針
    比如,對於一個指向整形的普通指針,定義形式如下:int *p;在定義中,指針變量的名稱是p,符號「*」說明了p是一個指針,int說明這個指針指向的是整形變量。那麼,如果我們定義一個指向函數的指針,假設變量名稱為p,比如它指向這樣的一個函數,這個函數需要兩個整形參數,其返回值也是整形參數,其定義如下:int (*p)(int, int);對這個定義分解一下,其中,p是變量的名稱,符號「*」說明了p是一個指針,由於這個指針指向的是一個函數,所以在定義中必須體現函數的輸入輸出參數信息,那麼最前面的int指的就是函數的返回值為
  • 深入理解C語言
    我相信你對a的輸出相當有把握,就分別是4,5,6,因為那個靜態變量。對於c呢,你應該也比較肯定,那是一堆亂數。但是你可能不知道b的輸出會是什麼?答案是1,2,3。為什麼和c不一樣呢?因為,如果要初始化,每次調用函數裡,編譯器都要初始化函數棧空間,這太費性能了。但是c的編譯器會初始化靜態變量為0,因為這只是在啟動程序時的動作。