首頁>Club>
懂得的朋友通俗易懂的解釋一下。
11
回覆列表
  • 1 # AngryRED

    二維陣列,就是將一維數組裡的每一個元素都設定為一個數組。

    數學裡的二維矩陣就是二維陣列,更通俗點,如excel中的表格,很多行就表示外面的一維陣列,而某一行有好多列,這些列就表示二維陣列中的值。

  • 2 # 小研己

    從應用的角度看二維陣列,很簡單,就是個矩陣。

    從儲存的角度看,更簡單,就是一排連續記憶體。

    從實現的角度看,確定型別後,不論是按名訪問,指標訪問還是引用訪問,都是由編譯器透過計算找到記憶體地址,然後傳遞。

  • 3 # 和博-明

    從資料邏輯結構來看,可將二維陣列當成矩陣,其下標就是矩陣的元素下標,只不過行列編號從0開始。

    從物理儲存結構來看,二維陣列也就是線上性記憶體空間中分配的一整塊連續記憶體空間(其實不管是幾維陣列,都是一整塊連續空間)。為實現陣列下標與物理記憶體地址直接的對映,首先,需要預先知道記憶體塊的起始地址,C語言中的陣列名即為此起始地址;其次,陣列型別其實表明每個陣列元素佔用的記憶體位元組數。有此兩者,再結合陣列元素的下標(代表著元素在陣列中的位置),即可計算出每個陣列元素的記憶體地址,進而可實現每個陣列元素的讀寫訪問操作。

    這裡關鍵是要理解C語言指標和記憶體地址的關係。

  • 4 # IT劉小虎

    相信題主應該明白 C 語言中基本資料型別的變數,例如定義一個 float 型變數:

    float a = 3.14;

    變數 a 能表示一個數值,但是現實生活中,僅僅使用一個單數值常常是不能完成任務的。更多情況下,需要解決的問題資料型別都是比較複雜的。

    一維陣列

    小明班級有 40 名同學,現在考試成績出來了,要求我們使用 C 語言把它們的成績從高到低排出來。要用 C 語言解決這個問題,首先要用 C 語言把 40 名同學的成績表示出來。但是總不可能定義 40 個變數來儲存各位同學的成績吧?

    好在 C 語言提供了陣列語法,我們定義一個 score 陣列用於解決這個問題是非常合適的:

    float score[40];

    score 有 40 個元素,可以表示 40 個同學的成績。C 語言在記憶體中開闢一塊連續的記憶體,供 score 使用,這塊記憶體的大小等於 40*sizeof(float) 位元組。

    二維陣列

    要是現實生活中,所有問題都這麼簡單就好了,那我只要利用 C 語言的一維陣列,就能走遍天下都不怕了。但是事與願違,哪怕只是一個 9 宮格,一維陣列已經不方便描述它了。

    難道要定義 3 個一維陣列來描述這個 9 宮格?就算可以,要是這個表再大點呢?比如 1000行,1000列呢?更進一步的,要是希望我們使用 C 語言描述笛卡爾二維座標系,使用一維陣列豈不是麻煩死了?

    二維座標系裡的座標怎樣表示方便呢?數學中的表示方法就不錯,橫座標為 a,縱座標為 b 的點,寫作(a, b)。

    為了表述方便,使用 P 表示 9 宮格。如果在 P 中畫上座標軸,那每個格子描述起來就方便了,P(0,0) = 0, P(0,1) = 1,...

    那要是 C 語言也能這麼用,表示9宮格就太方便了,對不?實際上,還真可以。請看:

    float pos[9][9];pos[0][0]=0;pos[0][1]=1;

    幾乎與用座標描述一模一樣,這可比用一維陣列描述方便多了。類似的,三維陣列,四維陣列,都有適合使用它們的時候,理解方法也同二維陣列相似。

    二維陣列的記憶體分配

    對於人類來說方便的,死板的計算機不一定也這麼認為。實際上,C 語言希望“規則”越少越好,它不怕麻煩,就怕“靈活”。

    C語言對記憶體的分配方式,可不會隨著人類認為的“維度”變化而變化。它就一種分配記憶體的方式,不管你是幾維陣列,分配記憶體統一按照線性劃分。

    對於 P[1][2],C語言會將其解釋為 P[1*3+2]。計算機最恨的就是“動腦”了,能用一維解決,就絕對不用二維。

    而我們人類,最喜歡的就是,怎樣方便怎樣來。這也算是人與機器的區別吧。

  • 5 # C語言答疑課堂

    C語言二維陣列是C語言語法中一個很重要的概念,也是一個比較難以理解的點。二維陣列之所以不好理解是因為它是一個數組的陣列,從名字上來看就會讓人心生畏懼;再從頭腦理解的角度來看,需要在腦海中構建出C語言陣列的陣列的形象畫面,這很抽象也很吃力。不過二維陣列真沒那麼可怕,希望我下面的講解會讓你發自內心的感慨:原來C語言二維陣列這麼簡單!

    在說C語言二維陣列之前,我們先說說一維陣列。

    一、C語言一維陣列

    我定義一個C語言中的一維陣列,如下:

    int array_one[3] = {1,2,3};

    英文單詞”array“的中文意思是”陣列“,我就用它來表示這個陣列的名字。這個陣列有三個元素,分別是1,2,3,這個大家都很好理解了。之所以這個C語言陣列叫”一維陣列“,是因為array_one陣列的元素已經是最小的實體了,不可再拆開了。你說數字1,2,3你咋拆開,對不對?所以C語言一維陣列核心概念在於一個關鍵詞:不可”拆開“。下面說到C語言二維陣列時,會用”拆開“這個關鍵詞來解釋。

    二、C語言二維陣列

    下面我再定義一個C語言中的二維陣列,如下:

    int array_two[2][3] = { {1,2,3}, {4,5,6} };

    這種寫法表示array是一個二維陣列,它包含兩個元素,每個元素又是一個數組。看到這你是不是有點犯暈了?沒關係,我們慢慢剖析。

    1、C語言二維陣列與一維陣列寫法的比較

    從一維陣列與二維陣列的寫法上來看,有兩個不同點:

    第一個區別:

    array_one[];

    array_two[][];

    一維陣列後面緊跟一個方括號,而二維陣列後面會有兩個方括號;

    第二個區別:

    {1,2,3};

    { {1,2,3}, {4,5,6} };

    在元素賦值方面,一維陣列使用了一個花括號,二維陣列在使用了一個花括號的同時在裡面又有兩個小花括號。

    寫法上就這兩個區別,你也不用去鑽牛角尖為什麼二維陣列要有兩個方括號、花括號裡為啥又嵌入了花括號,你只要記住二維陣列就是這麼寫的就行了。重點是下面:

    2、C語言二維陣列與一維陣列含義的比較

    一維陣列array_one之所以叫一維陣列,是因為它的元素1,2,3是不可再拆開的東東。

    二維陣列array_two之所以叫二維陣列,是因為它的元素是可以繼續拆開的。你可以把C語言二維陣列array_two看成以下形式:

    array_two[2][3]={array_two[0], array_two[1]}。它的第一個元素是array_two[0],第二個元素是array_two[1]。其中:

    第一個元素array_two[0]又可以拆開為{1,2,3},你可以看成array_two[0] = {1,2,3};

    第二個元素array_two[1]又可以拆開為{4,5,6},你可以看成array_two[1] = {4,5,6};

    換句話說, C語言二維陣列array_two的元素是array_two[0]和array_two[1],它們各自是可以繼續拆開的,這就是二維陣列的所謂”二維“的核心含義。

    所以啊,你使用”拆開“這個關鍵詞來理解C語言二維陣列和一維陣列就很好理解,就是一個的元素不可拆開,一個的元素還可以繼續拆開嘛!所以,這次你理解了嗎?

  • 6 # C語言學習探討

    https://m.toutiaocdn.cn/item/6671941067069194759/?app=news_article&timestamp=1555083609&req_id=20190412234009010017042207218361D&group_id=6671941067069194759

    可以看看我這片文章

  • 中秋節和大豐收的關聯?
  • 牛的各個部位,分別適合做什麼菜?