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

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

C 語言支持數(shù)組數(shù)據(jù)結(jié)構(gòu),它可以存儲一個固定大小的相同類型元素的順序集合。數(shù)組是用來存儲一系列數(shù)據(jù),但它往往被認為是一系列相同類型的變量。數(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 標識符。一個二維數(shù)組可以被認為是一個帶有 x 行和 y 列的表格.
數(shù)組中的每個元素是使用形式為 a[ i , j ] 的元素名稱來標識的,其中 a 是數(shù)組名稱,i 和 j 是唯一標識 a 中每個元素的下標。
初始化二維數(shù)組
多維數(shù)組可以通過在括號內(nèi)為每行指定值來進行初始化。下面是一個帶有 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ù)組中的元素是通過使用下標(即數(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>

/* 要生成和返回隨機數(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容