c语言学习之基础知识点介绍(十):数组
生活随笔
收集整理的這篇文章主要介紹了
c语言学习之基础知识点介绍(十):数组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本節主要介紹數組。
一、數組
/* 數組:一個變量可以存n個變量。 語法:類型 數組名[長度(正整數)]; 例如:int score[5];//定義了一個int類型的數組,長度為5,可以保存5個數據。char score[5];//定義了一個char 類型的數組,長度為5,可以保存5個數據。 訪問數組中的元素:取值:數組名[編號];賦值: 數組名[編號] = 值;元素:數組中實際存放的一個個數據。 下標/索引:系統自動分配的編號,從0開始。 長度:數組實際保存元素的個數。 */ //例如: int main(int argc,const char * argv[]){int scores[10];//可以保存10個數據。//循環為scores賦值。for(int i= 0;i<10;i++){scores[i] = i;}//循環打印scores的元素。for(int i= 0;i<10;i++){printf("第%d個元素的值為:%d \n",i+1,i);} } /* 數組的賦值:1、先聲明,后賦值。類型 數組名[長度];數組名[下標] = 值;2、在聲明的時候初始化。1)、類型 數組名[長度] = {數據1,數據2,數據3,數據4,.......};例如:char charTest[3] = {'a','b','c'};2)、類型 數組名[] = {數據1,數據2,數據3,數據4,.......};例如:char charTest[] = {'a','b','c'};//第二種方式的長度,編譯器會根據元素的個數來確定。3)、類型 數組名[5] = {數據1,數據2};//給的數據小于指定的長度例如:char charTest[5] = {'a','b','c'};4)、類型 數組名[5] = {[下標]=數據1,[下標]=數據2,};//給的數據小于指定的長度例如:char charTest[5] = {[3] = 'a',[1] = 'b',[0] = 'c'};遍歷數組:用循環依次訪問數組中的每一個元素。數組的越界:定義:訪問不屬于數組本身空間的元素,運行時會報錯,也可能是未知的異常。 數組最大訪問的下標:長度-1。計算數組的長度:sizeof(數組名);:得到這個數組占用內存的總長度。數組的長度 = sizeof(數組名) / sizeof(類型); 注意:1、數組和數組變量之間,不能賦值。例如:int nums1[5] = {1,2,3,4,5};int nums2[5] = nums1;2、數組名聲明后也不能直接賦值。例如:int nums1[5] ;nums1 = {1,2,3,4,5}; 原因:數組名是一個地址常量。 */ /* 數組作為函數的參數:語法:返回值類型 函數名(類型 數組名[]){ 函數體; } 注意:參數中數組的長度可不寫,寫了也沒用,規范的寫法時不寫。下面看一組代碼 */ void test1(int nums[]){nums[0]=11;nums[1]=22;nums[2]=33; } int main(int argc,const char * argv[]){int nums[] = {1,2,3};test();for(int i = 0;i<3;i++){//注意:這里輸出的不是1,2,3,而是11,22,33。printf("%d \n",nums[i]);}return 0; } /* 上面的代碼涉及到另外一個概念:引用傳遞。概念:傳遞的是地址,相當于把該變量的內存地址共享給函數。特點:在函數內部改變了形參的值,外面的實參也會發生變化。 說明:基本數據類型(int,char,long,double,float,short)不是引用傳遞;數組是引用傳遞。 注意:1、在函數中,不能直接計算形參(數組)的長度,永遠等于2。解決辦法就是在多傳遞一個參數,作為數組的長度。2、函數的數組形參可以不寫長度,但是區分類型。 */二、冒泡排序
/* 冒泡排序是一種排序算法。 冒泡排序算法的運作如下:(從后往前)1、比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數。3、針對所有的元素重復以上的步驟,除了最后一個。4、持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。 代碼如下: */ int main(int argc,const char * argv[]){//首先定義個數組int nums[5] = {23,4,7,2,77};int len = sizeof(nums)/sizeof(int);//得到數組的長度for(int i = 0;i < len - 1;i++ ){ //得到循環的次數for(int j = 0 j<len-i-1;j++){ //得到每次需要比較的次數if(nums[j]>nums[j+1]){int num = nums[j];//保存j元素的值nums[j] = nums[j+1];//交換元素的位置nums[j+1] = num ;//把j往后移 }}}return 0; }三、二維數組?
/* 二維數組:一個數組里面的元素又是一個數組。 語法: 類型 數組名[常量表達式1][常量表達式2]; 例如:int nums[3][5]; 說明:常量表達式1可以理解為行數,常量表達式2可以理解為列數。上述代碼可以理解為一個3行5列的數組,數組名為nums,其下標變量的類型為整型。該數組的下標變量共有3×5個,相當于一個擁有3行5列的平面。 所以:類型 數組名[行數][列數];二維數組的初始化:1、先聲明,后賦值。 例如:int nums[3][5];nums[0][0] = 1;nums[0][1] = 2;nums[0][2] = 3;nums[0][3] = 4;nums[0][4] = 5;//以此類推 取值:nums[0][4] = 52、聲明的時候初始化。 1)、例如:int nums[3][5] = {{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}}; 語法:類型 數組名[行][列] = {{元素列表},{元素列表},{元素列表}}; 取值:nums[0][4] = 5 2)、例如:int nums[3][5] = {1,2,3,4,5,1,2,3,4,5,1,2,3,4,5};//這樣會根據列數自動分行,等價于前一種方式。 語法:類型 數組名[行][列] = {元素列表}; 取值:nums[0][4] = 5 3)、例如:int nums[][3] = {1,2,3,4,5,6}//省略行數,會根據列數自動檢測分為幾行 語法:類型 數組名稱[][列數] = {元素列表}; 取值:nums[0][2] = 3注意:行可以省略,但是列絕對不可以省略。 */ //例如: int nums[][3]={1,2,3,4};//這也是2行3列,按列數分行,不足的以0補齊。上面介紹了二維數組初始化的一些知識點,下面介紹二維數組的遍歷、行和列的計算。
/* 二維數組相當于一個平面,所以需要用兩個循環來控制。外層循環控制行數,內層循環控制行數。 例如: int nums[2][3] = {1,2,3,4,5,6}; for(int i=0;i<2;i++){for(int j=0;j<3;j++){printf("%d \n",nums[i][j]);} } 輸出:1 2 3 4 5 6 二維數組計算列數: 每行的總長度 / 元素占用的字節數 sizeof(數組名[0])/sizeof(類型); 例如:int nums[3][4];sizeof(nums[0])/sizeof(int);//得到4 計算行數: 二維數組的總產度 / 每行的長度 sizeof(二維數組名) / sizeof(二維數組名[0]) 例如:int nums[3][4];sizeof(nums)/sizeof(nums[0]);//得到3 */?
轉載于:https://www.cnblogs.com/bobo-pcb/p/4915103.html
總結
以上是生活随笔為你收集整理的c语言学习之基础知识点介绍(十):数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 61 logcat
- 下一篇: 用函数指针调用函数