小白對c語言數組的基礎總結

来源:https://www.cnblogs.com/kxsph/archive/2018/03/22/8597838.html
-Advertisement-
Play Games

數組 數組是一系列相同類型元素有序的集合。 數組的定義: 一般形式為: 類型符 數組名 [常量表達式] 如 int a[5]; 表示數組有五個元素,a[0]-a[5],不存在元素a[5]。 *註意: 1.常量表達式中可以包含常量和符號常量,如“int a[3+5];" 2.c語言不允許對數組的大小作 ...


數組

數組是一系列相同類型元素有序的集合。

數組的定義:

  一般形式為: 類型符 數組名 [常量表達式] 如 int a[5]; 表示數組有五個元素,a[0]-a[5],不存在元素a[5]。

  *註意:  1.常量表達式中可以包含常量和符號常量,如“int a[3+5];"

      2.c語言不允許對數組的大小作動態定義。

  //列如,下列對數組的定義是不合法的:
int n;
scanf("%d",&n);
int a[n];
  //這段代碼在Visual c++中編譯會報錯,但在dev c++ 和 gcc中不會,能夠正常運行!

  //但是在被調用的函數中定義的數組,其長度可以是變數或非變數表達式 如:
viod fun(int n)
{
  int a[n*2];
  
}

 


 

數組的初始化:

  通過查閱書籍,搜索資料,收集到如下初始化方式:

int a[5]={0,1,2,3,4};   
 // a[0]=0, a[1]=1, a[2]=2, a[3]=3, a[4]=4
char ch[]

int a[5]={0,1};  //只對一部分元素賦值
// a[0]=0, a[1]=1, a[2]=0 a[3]=0 a[4]=0

int a[5]={0};    //全部元素賦值為0;
// a[0]=0, a[1]=0 a[2]=0 a[3]=0 a[4]=0

int a[]={0.1.2.3.4}  //知道元素個數,不指定數組長度
// a[0]=0, a[1]=1, a[2]=2, a[3]=3, a[4]=4

char ch[5]={"hello"};
char ch[5]="hello";

char ch[10]={'h','e','l','l','\0'};
//這裡不要忘記為最後的,'\0'分配空間。如果要初始化一個字元串"hello",那為它定義的數組至少有6個數組元素,但是如果忘記了,一些編譯器會自動補充

int a[5];
for(i=0;i<5;i++)
{
 a[i]=i;
}//使用for迴圈賦值

//使用memset給數組賦指定的ASCLL值
  char a[10];
  memset(a,0,strlen(a)); //全部賦值為0
用法:void *memset(void *s, int ch, int size_t n)

 


 

數組的大小和長度:

  sizeof(數據類型)*元素個數

  sizeof(數組名)

int a[5];
sizeof(a); //此時a代表的是數組名,而不是數組的首地址 所以大小為20,而不是4;

  malloc函數動態分配數組長度

int main()
int len; 
    printf("輸入分配的數組長度:len= "); 
    scanf("%d,&len"); 
    int * pArr = (int *)malloc(sizeof(int)*len); 
    *pArr = 4;          //類似於a[0] = 4; 
    pArr[1] = 10;     //類似於a[1] = 10,指針的數組用法
    *(pArr+2)=20;    //通過+1操作賦值
   printf("%d %d %d", *pArr, pArr[1],*(pArr+2)); 
 
    free(pArr);  
 
    return 0
}

   len=5時,便使用malloc函數分配20個位元組,並強制轉換成int類型的地址,malloc函數只返回第一個位元組地址,通過+1操作獲取後面的地址。

   使用free(pArr)釋放記憶體。
  數組的地址:     1.a與&a

    雖然a=&a,在值上看起來相等,也都表示數組的首地址,我們通過+1操作來瞭解它們的區別。

int a[10]={0,1,2,3,4,5,6,7,8,9};
  printf("a[0]_size=%d\n",sizeof(a[0])); //數組元素的大小
  printf("a_size=%d\n",sizeof(a));    //數組的大小
  printf("a=%p\n",a);
  printf("a+1=%p\n",a+1);
  printf("&a=%p\n",&a);
  printf("&a+1=%p\n",&a+1);
return 0;

 

 

  

  a:它的類型是int* 所以它+1的步長為數組元素大小的位元組數,也就是4個位元組,a+1就是a[1]的地址。

  &a:它的類型數int *[10] 所以它+1的步長為數組大小的位元組數,也就是40個位元組,&a+1就是a[10]的地址(a[10]已經越界了)。

 

  2.a[0]與&a[0]

  int a[10]={0,1,2,3,4,5,6,7,8,9};
  printf("a[0]_sizeof=%d\n",sizeof(a[0])};
  printf("a[0]=%d\n",a[0]);
  printf("a[0]+1=%d\n",a[0]+1);
  printf("&a[0]=%p\n",&a[0]);
  printf("&a[0]+1=%p\n",&a[0]+1);

 

  

   a[0]:數組中的元素,值為0,a[0]+1=1。

  &a[0]:數組首元素的地址,其值與a和&a相同,它的類型為int *,所以它+1的步長為數組元素大小的位元組數,也就是4個位元組,&a[0]+1就是a[1]的地址。


 

數組的使用方式

  1.數組形式

  2.指針形式

int a[5];
a[0]=0;  //數組形式
*(a+1)=1; //指針形式

 

修改數組內容的彙編過程:

  1.通過數組名找到首地址;

  2.根據地址的偏移量,找到需要修改元素的地址

  3.修改內容


 希望大家多多提點一下。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目的描述:全新的騰訊雲Linux伺服器,系統是ubuntu 16.04。需要在上面安裝mysql資料庫。 使用XShell遠程登錄,在終端視窗中使用sudo apt-get 指令線上安裝mysql。 在安裝MySql之前先執行更新指令: 效果圖如下: 接著執行安裝MySql指令: 這時候系統會去下載 ...
  • 一、前言 最近有點想弄一個站內搜索的功能,之前學過了Lucene,後來又聽過Solr這個名詞。接著在瞭解全文搜索的時候就發現了Elasticsearch這個,他也是以Lucene為基礎的。 我去搜了幾篇Elasticsearch教程,發現很多都是基於linux的,但我linux耍得並不熟,很少用。僅 ...
  • Django 千鋒培訓讀書筆記 https://www.bilibili.com/video/av17879644/?p=1 切換到創建項目的目錄 cd C:\Users\admin\Desktop\DjangoProject 創建名為project的項目命令 django-admin startp... ...
  • L2-006. 樹的遍歷 時間限制 記憶體限制 代碼長度限制 判題程式 作者 400 ms 65536 kB 8000 B Standard 陳越 給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。 時間限制 記憶體限制 代碼長度限制 判題程式 作者 400 ...
  • python數據類型、數字類型、int、float、math ...
  • selenium安裝 selenium操作瀏覽器原理 早期selenium 1.0 用的selenium RC, 後來selenum2集合了selenium1.0 + webdriver,selenium RC被webdriver替換。通過webdriver,測試腳本(例如python)可以方便的通 ...
  • 事務管理對於企業應用來說是至關重要的,當出現異常情況時,它也可以保證數據的一致性。 Spring事務管理的兩種方式 spring支持編程式事務管理和聲明式事務管理兩種方式。 編程式事務 使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。 ...
  • Description In last winter, there was a big snow storm in South China. The electric system was damaged seriously. Lots of power lines were broken and ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...