數(shù)組(更新...)

在學(xué)習(xí)語言時,我們都會遇到數(shù)組.大學(xué)期間學(xué)過C,C++,Java,C#.這些語言中都學(xué)了數(shù)組,那時候用的不多,概念比較模糊,現(xiàn)在又學(xué)了php,里面也有數(shù)組,就打算寫一篇筆記總結(jié)下不同語言的數(shù)組之間的異同.
首先看下C是怎么定義數(shù)組的:

C 語言支持?jǐn)?shù)組數(shù)據(jù)結(jié)構(gòu)职祷,它可以存儲一個固定大小的相同類型元素的順序集合。數(shù)組是用來存儲一系列數(shù)據(jù),但它往往被認(rèn)為是一系列相同類型的變量。數(shù)組的聲明并不是聲明一個個單獨的變量,比如 number0父晶、number1、...、number99逸吵,而是聲明一個數(shù)組變量,比如 numbers缝裁,然后使用 numbers[0]扫皱、numbers[1]、...捷绑、numbers[99] 來代表一個個單獨的變量韩脑。數(shù)組中的特定元素可以通過索引訪問。所有的數(shù)組都是由連續(xù)的內(nèi)存位置組成粹污。最低的地址對應(yīng)第一個元素段多,最高的地址對應(yīng)最后一個元素。

聲明數(shù)組(需要指定元素的類型和元素的數(shù)量):
type arrayName [ arraySize ];
這叫做一維數(shù)組壮吩。arraySize 必須是一個大于零的整數(shù)常量进苍,type 可以是任意有效的 C 數(shù)據(jù)類型蕾总。例如,要聲明一個類型為 double 的包含 10 個元素的數(shù)組 balance(可以容納 10 個類型為 double 的數(shù)字琅捏。)生百,聲明語句如下:
double balance[10];

在 C 中,可以逐個初始化數(shù)組柄延,也可以使用一個初始化語句

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

如何訪問數(shù)組?
double salary = balance[9];

上面的語句將把數(shù)組中第 10 個元素的值賦給 salary 變量蚀浆。下面的實例使用了上述的三個概念,即搜吧,聲明數(shù)組市俊、數(shù)組賦值、訪問數(shù)組:

#include <stdio.h>
 
int main ()
{
   int n[ 10 ]; /* n 是一個包含 10 個整數(shù)的數(shù)組 */
   int i,j;
 
   /* 初始化數(shù)組元素 */         
   for ( i = 0; i < 10; i++ )
   {
      n[ i ] = i + 100; /* 設(shè)置元素 i 為 i + 100 */
   }
   
   /* 輸出數(shù)組中每個元素的值 */
   for (j = 0; j < 10; j++ )
   {
      printf("Element[%d] = %d\n", j, n[j] );
   }
 
   return 0;
}

編譯結(jié)果
Element[0] = 100 Element[1] = 101 Element[2] = 102 Element[3] = 103 Element[4] = 104 Element[5] = 105 Element[6] = 106 Element[7] = 107 Element[8] = 108 Element[9] = 109
C 語言支持多維數(shù)組(二維數(shù)組)滤奈。多維數(shù)組聲明的一般形式如下:
type name[size1][size2]...[sizeN];
一個二維數(shù)組摆昧,在本質(zhì)上,是一個一維數(shù)組的列表蜒程。聲明一個 x 行 y 列的二維整型數(shù)組绅你,形式如下:
type arrayName [ x ][ y ];
type 可以是任意有效的 C 數(shù)據(jù)類型,arrayName 是一個有效的 C 標(biāo)識符昭躺。一個二維數(shù)組可以被認(rèn)為是一個帶有 x 行和 y 列的表格.
數(shù)組中的每個元素是使用形式為 a[ i , j ] 的元素名稱來標(biāo)識的忌锯,其中 a 是數(shù)組名稱,i 和 j 是唯一標(biāo)識 a 中每個元素的下標(biāo)领炫。
初始化二維數(shù)組
多維數(shù)組可以通過在括號內(nèi)為每行指定值來進(jìn)行初始化偶垮。下面是一個帶有 3 行 4 列的數(shù)組

int a[3][4] = {  
 {0, 1, 2, 3} ,   /*  初始化索引號為 0 的行 */
 {4, 5, 6, 7} ,   /*  初始化索引號為 1 的行 */
 {8, 9, 10, 11}   /*  初始化索引號為 2 的行 */
};

內(nèi)部嵌套的括號是可選的,下面的初始化與上面是等同的:
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

訪問二維數(shù)組元素
二維數(shù)組中的元素是通過使用下標(biāo)(即數(shù)組的行索引和列索引)來訪問的帝洪。例如:int val = a[2][3];
上面的語句將獲取數(shù)組中第 3 行第 4 個元素似舵。下面使用嵌套循環(huán)來處理二維數(shù)組:

#include <stdio.h>
 
int main ()
{
   /* 一個帶有 5 行 2 列的數(shù)組 */
   int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
   int i, j;
 
   /* 輸出數(shù)組中每個元素的值 */
   for ( i = 0; i < 5; i++ )
   {
      for ( j = 0; j < 2; j++ )
      {
         printf("a[%d][%d] = %d\n", i,j, a[i][j] );
      }
   }
   return 0;
}

結(jié)果:

a[0][0]: 0
a[0][1]: 0
a[1][0]: 1
a[1][1]: 2
a[2][0]: 2
a[2][1]: 4
a[3][0]: 3
a[3][1]: 6
a[4][0]: 4
a[4][1]: 8

C 傳遞數(shù)組給函數(shù)

通過指定不帶索引的數(shù)組名稱來給函數(shù)傳遞一個指向數(shù)組的指針。

三種方式來聲明函數(shù)形式參數(shù)

  • 形參是一個指針
void myFunction(int *param)
{
...
}
  • 形參是一個已定義大小的數(shù)組
void myFunction(int param[10])
{
...
}

形參是一個未定義大小的數(shù)組

void myFunction(int param[ ])
{
...
}

C 從函數(shù)返回數(shù)組

C 語言不允許返回一個完整的數(shù)組作為函數(shù)的參數(shù)葱峡。但是砚哗,可以通過指定不帶索引的數(shù)組名來返回一個指向數(shù)組的指針。再來學(xué)習(xí)本章的內(nèi)容族沃。如果想要從函數(shù)返回一個一維數(shù)組频祝,必須聲明一個返回指針的函數(shù).
另外,C 不支持在函數(shù)外返回局部變量的地址脆淹,除非定義局部變量為 static 變量常空。

#include <stdio.h>

/* 要生成和返回隨機(jī)數(shù)的函數(shù) */
int * getRandom( )
{
  static int  r[10];
  int i;

  /* 設(shè)置種子 */
  srand( (unsigned)time( NULL ) );
  for ( i = 0; i < 10; ++i)
  {
     r[i] = rand();
     printf( "r[%d] = %d\n", i, r[i]);

  }

  return r;
}

/* 要調(diào)用上面定義函數(shù)的主函數(shù) */
int main ()
{
   /* 一個指向整數(shù)的指針 */
   int *p;
   int i;

   p = getRandom();
   for ( i = 0; i < 10; i++ )
   {
       printf( "*(p + %d) : %d\n", i, *(p + i));
   }

   return 0;
}

結(jié)果:

r[0] = 313959809
r[1] = 1759055877
r[2] = 1113101911
r[3] = 2133832223
r[4] = 2073354073
r[5] = 167288147
r[6] = 1827471542
r[7] = 834791014
r[8] = 1901409888
r[9] = 1990469526
*(p + 0) : 313959809
*(p + 1) : 1759055877
*(p + 2) : 1113101911
*(p + 3) : 2133832223
*(p + 4) : 2073354073
*(p + 5) : 167288147
*(p + 6) : 1827471542
*(p + 7) : 834791014
*(p + 8) : 1901409888
*(p + 9) : 1990469526
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市盖溺,隨后出現(xiàn)的幾起案子漓糙,更是在濱河造成了極大的恐慌,老刑警劉巖烘嘱,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昆禽,死亡現(xiàn)場離奇詭異蝗蛙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)醉鳖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門捡硅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盗棵,你說我怎么就攤上這事壮韭。” “怎么了纹因?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵喷屋,是天一觀的道長。 經(jīng)常有香客問我瞭恰,道長屯曹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任惊畏,我火速辦了婚禮恶耽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘陕截。我一直安慰自己驳棱,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布农曲。 她就那樣靜靜地躺著,像睡著了一般驻债。 火紅的嫁衣襯著肌膚如雪乳规。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天合呐,我揣著相機(jī)與錄音暮的,去河邊找鬼。 笑死淌实,一個胖子當(dāng)著我的面吹牛冻辩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拆祈,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼恨闪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了放坏?” 一聲冷哼從身側(cè)響起咙咽,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淤年,沒想到半個月后钧敞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜡豹,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年溉苛,在試婚紗的時候發(fā)現(xiàn)自己被綠了镜廉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡愚战,死狀恐怖娇唯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凤巨,我是刑警寧澤视乐,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站敢茁,受9級特大地震影響佑淀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜彰檬,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一伸刃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逢倍,春花似錦捧颅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至亮蒋,卻和暖如春扣典,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慎玖。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工贮尖, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趁怔。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓湿硝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親润努。 傳聞我的和親對象是個殘疾皇子关斜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運用指針編程是C語言最主要的風(fēng)格之一任连。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)蚤吹; ...
    朱森閱讀 3,424評論 3 44
  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin裁着! 什么是Kotlin繁涂? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,146評論 9 118
  • 大部分的孤獨都是空間上的,而不是物理上的二驰。
  • 自古雄才多磨難,從來紈绔少偉男桶雀! 話說我們中國人,自古就有一種秉性:在有生之年矗积,窮其之力,欲為子孫后代棘捣,創(chuàng)造用之不...
    泥巴一一龍鳳樓主閱讀 519評論 10 15
  • 01 去年辜腺,海口因“雙創(chuàng)”掀起了全民創(chuàng)文明乍恐、講衛(wèi)生的熱潮评疗。某個早晨茵烈,像往常一樣騎著小電動去送兒子入園百匆。為了方便呜投,我...
    留住小時光閱讀 230評論 0 0