C語言基礎之數組

1. 一維數組的創建和初始化

數組的創建

???????數組是一組相同類型元素的集合。 數組的創建方式:

type_t arr_name [const_n];
//type_t 是指數組的元素類型
//const_n是一個常量表達式,用來指定數組的大小

數組創建的實例:

//代碼1int arr1[10];
//代碼2int count = 10;int arr2[count];//數組時候可以正常創建?=》在 C99 及之后的標準中,代碼是合法的。在 C89/C90 標準中,count 必須是一個常量表達式,可以使用 #define 或 const 來定義常量。
//代碼3char arr3[10];float arr4[1];double arr5[20];

注:數組創建,[] 中要給一個常量才可以,不能使用變量。

數組的初始化

???????數組的初始化是指,在創建數組的同時給數組的內容一些合理初始值(初始化)。 看代碼:

int arr1[10] = {1,2,3};
int arr2[] = {1,2,3,4};
int arr3[5] = {12345}char arr4[3] = {'a',98, 'c'};
char arr5[] = {'a','b','c'};
char arr6[] = "abcdef";

???????數組在創建的時候如果想不指定數組的確定的大小就得初始化。數組的元素個數根據初始化的內容來確定。 但是對于下面的代碼要區分,內存中如何分配。

char arr1[] = "abc";
char arr2[3] = {'a','b','c'};

2. 一維數組的使用

???????對于數組的使用我們之前介紹了一個操作符:[] ,下標引用操作符。它其實就數組訪問的操作符。 我們來看代碼:

#include <stdio.h>int main(){int arr[10] = {0};//數組的不完全初始化//計算數組的元素個數int sz = sizeof(arr)/sizeof(arr[0]);//對數組內容賦值,數組是使用下標來訪問的,下標從0開始。所以:int i = 0;//做下標for(i = 0; i < 10; i++)//這里寫10,好不好?{arr[i] = i;}   //輸出數組的內容for(i = 0; i < 10; ++i){printf("%d ", arr[i]);}return 0;}

總結:

  1. 數組是使用下標來訪問的,下標是從0開始。
  2. 數組的大小可以通過計算得到。
 int arr[10];int sz = sizeof(arr)/sizeof(arr[0]);

3. 一維數組在內存中的存儲

???????接下來我們探討數組在內存中的存儲。 看代碼:

#include <stdio.h>int main(){int arr[10] = {0};int i = 0;for(i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i){printf("&arr[%d] = %p\n", i, &arr[i]);}return 0;}

???????隨著數組下標的增長,元素的地址,也在有規律的遞增。 由此可以得出結論:數組在內存中是連續存放的。
在這里插入圖片描述

4. 二維數組的創建和初始化

二維數組的創建:

//數組創建int arr[3][4];char arr[3][5];double arr[2][4];
 //數組初始化int arr[3][4] = {1,2,3,4};//由于提供的元素數量少于 12(3*4),其他未初始化的元素會自動被初始化為 0int arr[3][4] = {{1,2},{4,5}};//3 行 4 列的二維數組 arr。初始化列表中的第一行由 {1, 2} 組成,第二行由 {4, 5} 組成int arr[][4] = {{2,3},{4,5}};//

5. 二維數組的使用

二維數組的使用也是通過下標的方式。 看代碼:

#include <stdio.h>
int main()
{int arr[3][4] = {0};int i = 0;for(i=0; i<3; i++){int j = 0;for(j=0; j<4; j++){arr[i][j] = i*4+j;}}for(i=0; i<3; i++){int j = 0;for(j=0; j<4; j++){printf("%d ", arr[i][j]);}}return 0;
}

6. 二維數組在內存中的存儲

像一維數組一樣,這里我們嘗試打印二維數組的每個元素.

#include <stdio.h>int main(){int arr[3][4];int i = 0;for(i=0; i<3; i++){int j = 0;for(j=0; j<4; j++){printf("&arr[%d][%d] = %p\n", i, j,&arr[i][j]);}}return 0;}

結果表明,二維數組在內存中也是連續存儲的。

7 數組作為函數參數

???????
往往我們在寫代碼的時候,會將數組作為參數傳個函數,比如:我要實現一個冒泡排序(這里要講算法思想)函數將一個整形數組排序。 那我們將會這樣使用該函數:
案例:

#include <stdio.h>
int main()
{int arr[] = {3,1,7,5,8,9,0,2,4,6};bubble_sort(arr);for(i=0; i<sizeof(arr)/sizeof(arr[0]); i++){printf("%d ", arr[i]);}return 0;
}
void bubble_sort(int arr[])
{int sz = sizeof(arr)/sizeof(arr[0]);//這樣對嗎?... 
}

如果錯了,該怎么設計?

bubble_sort(arr, sz); //使用的時候,傳數組元素個數
void bubble_sort(int arr[], int sz)//參數接收數組元素個數
{//...}

???????數組作為函數參數的時候,不會把整個數組的傳遞過去。
???????實際上只是把數組的首元素的地址傳遞過去了。所以即使在函數參數部分寫成數組的形式:
然是一個指針:int *arr 。

???????結論:
???????數組傳參,如果函數內部需要知道數組元素個數應該在函數外部算出元素個數,以參數的形式傳遞給函數。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75520.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75520.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75520.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

虛幻引擎5-Unreal Engine筆記之“將MyStudent變量設置為一個BP_Student的實例”這句話如何理解?

虛幻引擎5-Unreal Engine筆記之“將MyStudent變量設置為一個BP_Student的實例”這句話如何理解&#xff1f; code review! 文章目錄 虛幻引擎5-Unreal Engine筆記之“將MyStudent變量設置為一個BP_Student的實例”這句話如何理解&#xff1f;理解這句話的關鍵點1.類&#xff08…

提示詞 (Prompt)

引言 在生成式 AI 應用中&#xff0c;Prompt&#xff08;提示&#xff09;是與大型語言模型&#xff08;LLM&#xff09;交互的核心輸入格式。Prompt 的設計不僅決定了模型理解任務的準確度&#xff0c;還直接影響生成結果的風格、長度、結構與可控性。隨著模型能力和應用場景…

十二、C++速通秘籍—靜態庫,動態庫

上一章節&#xff1a; 十一、C速通秘籍—多線程-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/147055932?spm1001.2014.3001.5502 本章節代碼&#xff1a; cpp2/library CuiQingCheng/cppstudy - 碼云 - 開源中國https://gitee.com/cuiqingcheng/cppst…

什么是繼承?js中有哪兒些繼承?

1、什么是繼承&#xff1f; 繼承是面向對象軟件技術中的一個概念。 2、js中有哪兒些繼承&#xff1f; js中的繼承有ES6的類class的繼承、原型鏈繼承、構造函數繼承、組合繼承、寄生組合繼承。 2.1 ES6中類的繼承 class Parent {constructor() {this.age 18;} }class Chil…

Linux進程通信入門:匿名管道的原理、實現與應用場景

Linux系列 文章目錄 Linux系列前言一、進程通信的目的二、進程通信的原理2.1 進程通信是什么2.2 匿名管道通訊的原理 三、進程通訊的使用總結 前言 Linux進程間同通訊&#xff08;IPC&#xff09;是多個進程之間交換數據和協調行為的重要機制&#xff0c;是我們學習Linux操作系…

探秘Transformer系列之(26)--- KV Cache優化 之 PD分離or合并

探秘Transformer系列之&#xff08;26&#xff09;— KV Cache優化 之 PD分離or合并 文章目錄 探秘Transformer系列之&#xff08;26&#xff09;--- KV Cache優化 之 PD分離or合并0x00 概述0x01 背景知識1.1 自回歸&迭代1.2 KV Cache 0x02 靜態批處理2.1 調度策略2.2 問題…

十大PDF解析工具在不同文檔類別中的比較研究

PDF解析對于包括文檔分類、信息提取和檢索在內的多種自然語言處理任務至關重要&#xff0c;尤其是RAG的背景下。盡管存在各種PDF解析工具&#xff0c;但它們在不同文檔類型中的有效性仍缺乏充分研究&#xff0c;尤其是超出學術文檔范疇。通過使用DocLayNet數據集&#xff0c;比…

HarmonyOS-ArkUI 裝飾器V2 @ObservedV2與@Trace裝飾器

參考文檔: 文檔中心https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V14/arkts-new-observedv2-and-trace-V14#trace%E8%A3%85%E9%A5%B0%E5%AF%B9%E8%B1%A1%E6%95%B0%E7%BB%84由于V2的裝飾器比V1的裝飾器更加易用,盡管學習的過程中用到的都是V1的裝飾器,但…

GPT - GPT(Generative Pre-trained Transformer)模型框架

本節代碼主要為實現了一個簡化版的 GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型。GPT 是一種基于 Transformer 架構的語言生成模型&#xff0c;主要用于生成自然語言文本。 1. 模型結構 初始化部分 class GPT(nn.Module):def __init__(self, vocab…

基于FPGA的六層電梯智能控制系統 矩陣鍵盤-數碼管 上板仿真均驗證通過

基于FPGA的六層電梯智能控制系統 前言一、整體方案二、軟件設計總結 前言 本設計基于FPGA實現了一個完整的六層電梯智能控制系統&#xff0c;旨在解決傳統電梯控制系統在別墅環境中存在的個性化控制不足、響應速度慢等問題。系統采用Verilog HDL語言編程&#xff0c;基于Cyclo…

車載通信系統中基于ISO26262的功能安全與抗輻照協同設計研究

摘要&#xff1a;隨著智能網聯汽車的快速發展&#xff0c;車載通信系統正面臨著功能安全與抗輻照設計的雙重挑戰。在高可靠性要求的車載應用場景下&#xff0c;如何實現功能安全標準與抗輻照技術的協同優化&#xff0c;構建滿足ISO26262安全完整性等級要求的可靠通信架構&#…

Node.js種cluster模塊詳解

Node.js 中 cluster 模塊全部 API 詳解 1. 模塊屬性 const cluster require(cluster);// 1. isMaster // 判斷當前進程是否為主進程 console.log(是否為主進程:, cluster.isMaster);// 2. isWorker // 判斷當前進程是否為工作進程 console.log(是否為工作進程:, cluster.isW…

融合動態權重與抗刷機制的網文評分系統——基于優書網、IMDB與Reddit的混合算法實踐

? Yumuing 博客 &#x1f680; 探索技術的每一個角落&#xff0c;解碼世界的每一種可能&#xff01; &#x1f48c; 如果你對 AI 充滿好奇&#xff0c;歡迎關注博主&#xff0c;訂閱專欄&#xff0c;讓我們一起開啟這段奇妙的旅程&#xff01; 以權威用戶為核心&#xff0c;時…

使用Golang打包jar應用

文章目錄 背景Go 的 go:embed 功能介紹與打包 JAR 文件示例1. go:embed 基礎介紹基本特性基本語法 2. 嵌入 JAR 文件示例項目結構代碼實現 3. 高級用法&#xff1a;嵌入多個文件或目錄4. 使用注意事項5. 實際應用場景6. 完整示例&#xff1a;運行嵌入的JAR 背景 想把自己的一個…

前端大屏可視化項目 局部全屏(指定盒子全屏)

需求是這樣的&#xff0c;我用的項目是vue admin 項目 現在需要在做大屏項目 不希望顯示除了大屏的其他東西 于是想了這個辦法 至于大屏適配問題 請看我文章 底部的代碼直接復制就可以運行 vue2 px轉rem 大屏適配方案 postcss-pxtorem-CSDN博客 <template><div …

《2025藍橋杯C++B組:D:產值調整》

**作者的個人gitee**?? 作者的算法講解主頁?? 每日一言&#xff1a;“淚眼問花花不語&#xff0c;亂紅飛過秋千去&#x1f338;&#x1f338;” 題目 二.解題策略 本題比較簡單&#xff0c;我的思路是寫三個函數分別計算黃金白銀銅一次新產值&#xff0c;通過k次循環即可獲…

[VTK] 四元素實現旋轉平移

VTK 實現旋轉&#xff0c;有四元數的方案&#xff0c;也有 vtkTransform 的方案&#xff1b;主要示例代碼如下&#xff1a; //構造旋轉四元數vtkQuaterniond rotation;rotation.SetRotationAngleAndAxis(vtkMath::RadiansFromDegrees(90.0),0.0, 1.0, 0.0);//構造旋轉點四元數v…

華為hcie證書的有效期怎么判斷?

在ICT行業&#xff0c;華為HCIE證書堪稱含金量極高的“敲門磚”&#xff0c;擁有它往往意味著在職場上更上一層樓。然而&#xff0c;很多人在辛苦考取HCIE證書后&#xff0c;卻對其有效期相關事宜一知半解。今天&#xff0c;咱們就來好好嘮嘮華為HCIE證書的有效期怎么判斷這個關…

【精品PPT】2025固態電池知識體系及最佳實踐PPT合集(36份).zip

精品推薦&#xff0c;2025固態電池知識體系及最佳實踐PPT合集&#xff0c;共36份。供大家學習參考。 1、中科院化學所郭玉國研究員&#xff1a;固態金屬鋰電池及其關鍵材料.pdf 2、中科院物理所-李泓固態電池.pdf 3、全固態電池技術研究進展.pdf 4、全固態電池生產工藝.pdf 5、…

MySQL 中為產品添加靈活的自定義屬性(如 color/size)

方案 1&#xff1a;EAV 模型&#xff08;最靈活但較復雜&#xff09; 適合需要無限擴展自定義屬性的場景 -- 產品表 CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100),price DECIMAL(10,2) );-- 屬性名表 CREATE TABLE attributes (id INT PRIMA…