c語言---數組(超級詳細)

數組

  • 一.數組的概念
  • 二. 一維數組的創建和初始化
    • 2.1數組的創建
    • 2.2數組的初始化
      • 錯誤的初始化
    • 2.3 數組的類型
  • 三. 一維數組的使用
    • 3.1數組的下標
    • 3.2數組元素的打印
    • 3.2數組元素的輸入
  • 四. 一維數組在內存中的存儲
  • 五. 二維數組的創建
    • 5.1二維數組的概念
    • 5.2如何創建二維數組
  • 六·.二維數組的初始化
    • 6.1不完全初始化
    • 6.2完全初始化
    • 6.3按行初始化
    • 6.4 初始化時省略行,但是不能省略列
  • 七.二維數組的使用
    • 7.1 二維數組的輸入和輸出
  • 八. 二維數組在內存中的存儲
  • 最后還有一個題目就是**多個字符從兩端移動,向中間匯聚**

一.數組的概念

數組是?組相同類型元素的集合

1.數組中存放的是1個或者多個數據,但是數組元素個數不能為0。
2.數組中存放的多個數據,類型是相同的。

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

2.1數組的創建

type arr_x[n]//n是數組元素個數

存放在數組的值被稱為數組的元素,數組在創建的時候可以指定數組的大小和數組的元素類型。

上述代碼中的type指的是數組中存放的數據類型,數據類型可以是char, short,int等等…

arr_x指的是數組名的名字
[]是下標引用操作符

比如:有20個整型元素,存放在數組中,此時可以創建一個一維數組:

int  arr[20]

當然其他類型也可以,比如:

char ch[20];
float core[10];

2.2數組的初始化

如何對數組進行初始化呢,下面就來解釋

int arr[5]={1,2,3,4,5};

上述代碼就是數組的完全初始化

int arr1[5]={0};

上述代碼就是數組的不完全初始化,也就是第一個元素為1,其余未初始化的數據,默認就是0

錯誤的初始化

int a[2]={0,1,23,4,5};

上述代碼會報錯,因為設置的初始值太多

2.3 數組的類型

數組也是具有類型的,數組也算是一種自定義類型,把數組名去掉剩下的就是數組類型

比如

char arr1[20];
int arr2[30];

arr1數組的類型就是char [20]
arr2數組的類型就是 int [30]

三. 一維數組的使用

3.1數組的下標

C語?規定數組是有下標的,下標是從0開始的,假設數組有n個元素,最后?個元素的下標是n-1,下標就相當于數組元素的編號,如下:

int arr[10] = {1,2,3,4,5,6,7,8,9,10};

在這里插入圖片描述
在C語?中數組的訪問提供了?個操作符[] ,這個操作符叫:下標引用操作符

int main()
{int arr[10] = {1,2,3,4,5,6,7,8,9,10}; printf("%d\n", arr[7]);//8printf("%d\n", arr[3]);//4return 0;
}

3.2數組元素的打印

這里我們直接訪問數組下標就可以實現數組打印

#include <stdio.h>
int main()
{int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int i = 0;for(i=0; i<10; i++){printf("%d ", arr[i]);}return 0;
}

下面是運行結果
在這里插入圖片描述

3.2數組元素的輸入

這里我們用for‘循環來實現數組的輸入


int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;for (i = 0; i < 10; i++){scanf("%d", &arr[i]);}for (i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}

下面是運行結果
在這里插入圖片描述

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

下面一段代碼,將打印數組的地址

int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;for (i = 0; i < 10; i++){printf("&arr[%d] = %p\n ", i, &arr[i]);}return 0;
}

下面是運算結果:
在這里插入圖片描述

從輸出的結果來看,數組隨著下標的增?,地址是由小到大變化的,并且我們發現每兩個相鄰的元素之間相差4(因為?個整型是4個字節)。所以:數組在內存中是連續存放的。

五. 二維數組的創建

5.1二維數組的概念

如果我們把?維數組做為數組的元素,這時候就是?維數組,?維數組作為數組元素的數組被稱為三維數組,?維數組以上的數組統稱為多維數組。

在這里插入圖片描述

5.2如何創建二維數組

type   arr_zy[n][n]//n是常量//如:
int arr_zy[3][7]
double arr_zy1[5][6]

解釋上述代碼中的信息:
3代表三行
7代表每行有7個元素
int表示數組的每個元素都是整型
arr_zy數組名,可以自定義

六·.二維數組的初始化

在創建變量或者數組的時候,給定?些初始值,被稱為初始化。

6.1不完全初始化

int arr_zy[2][4]={123}double arr_zy1[3][6]={652}

在這里插入圖片描述

6.2完全初始化

int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

6.3按行初始化

int arr4[3][5] = {{1,2},{3,4},{5,6}};

在這里插入圖片描述

6.4 初始化時省略行,但是不能省略列

int arr6[][5] = {1,2,3,4,5,6,7};
int arr7[][5] = {{1,2}, {3,4}, {5,6}};

在這里插入圖片描述
在這里插入圖片描述

七.二維數組的使用

7.1 二維數組的輸入和輸出

我們只要能夠按照?定的規律產?所有的?和列的數字就行;以上?段代碼中的arr數組為例,行的選擇范圍是0~ 2,列的取值范圍是0~4,所以我們可以借助循環實現?成所有的下標

int main()
{int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };int i = 0;//遍歷?//輸?for (i = 0; i < 3; i++) //產??號{int j = 0;for (j = 0; j < 5; j++) //產?列號{scanf("%d", &arr[i][j]); //輸?數據}}//輸出for (i = 0; i < 3; i++) //產??號{int j = 0;for (j = 0; j < 5; j++) //產?列號{printf("%d ", arr[i][j]); //輸出數據}printf("\n");}return 0;
}

下面是運行結果:
在這里插入圖片描述

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

可以打印出數組所有元素的地址的。代碼如下:

int main()
{int arr[3][5] = { 0 };int i = 0;int j = 0;for (i = 0; i < 3; i++){for (j = 0; j < 5; j++){printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);}}return 0;
}

運行結果如下:
在這里插入圖片描述

最后還有一個題目就是多個字符從兩端移動,向中間匯聚

#include<string.h>
#include<time.h>
#include<stdio.h>
#include<Windows.h>
int main()
{char arr1[] = "welcome to zy space";char arr2[] = "#######################";int left = 0;int right = strlen(arr1) - 1;printf("%s\n", arr2);while (left <= right){Sleep(1000);arr2[left] = arr1[left];arr2[right] = arr1[right];left++;right--;printf("%s\n", arr2);}return 0;
}

運行結果:
在這里插入圖片描述

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

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

相關文章

【嵌入式學習】QT-Day4-Qt基礎

簡單實現鬧鐘播報&#xff0c;設置時間&#xff0c;當系統時間與設置時間相同時播報語音5次&#xff0c;然后停止。如果設置時間小于當前系統時間&#xff0c;則彈出消息提示框&#xff0c;并清空輸入框。 #include "my_clock.h" #include "ui_my_clock.h&quo…

批量處理圖片,像素隨心所欲,創意無限釋放!

在數字化時代&#xff0c;圖片批量處理已成為設計、攝影、電商等多個領域不可或缺的一部分。然而&#xff0c;傳統的圖片批量處理方式往往效率低下&#xff0c;難以滿足現代人對高效和精準的需求。現在&#xff0c;我們為您帶來了一款一鍵圖片批量處理工具&#xff0c;讓您自由…

【Vue】更換瀏覽器默認 logo

更換瀏覽器默認logo為自定義圖片 一. 瀏覽器默認 logo二. 替換為自定義logo三. 步驟3.1 轉換大小3.1.1 查看圖片尺寸3.1.2 修改尺寸&#xff08;為32px 32px&#xff09; 3.2 替換成功 一. 瀏覽器默認 logo 二. 替換為自定義logo 三. 步驟 3.1 轉換大小 將自定義 logo 轉為323…

docker搭建zookeeper集群

文章目錄 1. 集群搭建2. Leader選舉3. Zookeeper集群角色 1. 集群搭建 這里我們使用docker-compose 搭建偽集群 version: 3.1 services:zoo1:image: zookeeperrestart: alwayscontainer_name: zoo1ports:- 2181:2181volumes:- /home/zk/zoo1/data:/data- /home/zk/zoo1/datal…

React富文本編輯器開發(二)

我們接著上一節的示例內容&#xff0c;現在有如下需求&#xff0c;我們希望當我們按下某個按鍵時編輯器有所反應。這就需要我們對編輯器添加事件功能onKeyDown, 我們給 Editor添加事件&#xff1a; SDocor.jsx import { useState } from react; import { createEditor } from…

【LeetCode-178】最長重復子串(動歸)

目錄 LeetCode718.最長重復子串 題目描述 解法1&#xff1a;動態規劃 代碼實現 題目鏈接 題目描述 給兩個整數數組 A 和 B &#xff0c;返回兩個數組中公共的、長度最長的子數組的長度。 示例&#xff1a; 輸入&#xff1a; A: [1,2,3,2,1] B: [3,2,1,4,7] 輸出&…

協方差矩陣計算

文章目錄 協方差矩陣計算原理python實現 協方差矩陣 協方差矩陣反映了兩個隨機變量變化時是同向還是反向的&#xff08;相關性&#xff09;。 如果協方差>0&#xff0c;則說明這兩個隨機變量同向變化。 協方差矩陣<0&#xff0c;則說明是反向變化。 協方差矩陣0&#xf…

【LeetCode】347.前 K 個高頻元素

今日學習的文章鏈接和視頻鏈接 leetcode題目地址&#xff1a;347.前 K 個高頻元素 代碼隨想錄題解地址&#xff1a;代碼隨想錄 題目簡介 給你一個整數數組 nums 和一個整數 k &#xff0c;請你返回其中出現頻率前 k 高的元素。你可以按 任意順序 返回答案。 看到題目的第一…

Python-公共操作與推導式

一、公共操作 運算符 (1)&#xff1a;合并操作符 適用范圍&#xff1a;字符串、列表、元組 (2)*&#xff1a;復制 適用范圍&#xff1a;字符串、列表、元組 (3)in&#xff1a;判斷某字符串存在 (4)not in&#xff1a;判斷某字符串不存在 list1[1,2] list2[3,4] t1(1,2) t2(3,…

手把手教你在 CentOS7 上部署Ngrok (踩坑填坑)

一、項目準備 1、一個可用的域名&#xff08;不是必須&#xff0c;但是最好有&#xff09; 2、一臺有公網IP的服務器 二、項目實施 本文的操作過程主要參考了《教你自己服務器搭建Ngrok》&#xff0c;但是隨著時間的推移&#xff0c;很多軟件因版本升級而產生了一些變化&…

掌握 MySQL 的數據類型

知道了表是由不同數據類型的列組成的&#xff0c;然后填充了一行一行的數據。 當我們要創建表的時候&#xff0c;就要根據業務需求&#xff0c;選擇合適的數據類型。比如在實戰項目中&#xff0c;文章表就是由下面這些不同數據類型的字段定義的。 目前用到了 bigint、tinyint、…

vue3+ts+vite使用mock數據

安裝以下命令 npm i vite-plugin-mock --save-dev npm i mockjs --save-dev 在根路徑下創建mock文件夾 mock\user.ts const menuList [{path: /system,component: Layout,name: system,meta: {title: 系統管理,icon: Setting,roles: [sys:manage]},children: [{path: /depar…

blender 導出bvh x軸旋轉90度

目錄 blender導出模型后&#xff0c;x 軸旋轉了 90 度&#xff0c;和縮放不對的問題 bvh&#xff1a; blender導出模型后&#xff0c;x 軸旋轉了 90 度&#xff0c;和縮放不對的問題 博文解決了fbx格式d軸旋轉90度的問題&#xff0c;bvh的沒有解決 Blender - Export FBX to …

Java中使用poi+poi-tl實現根據模板導出word文檔

場景 若依管理系統前后端分離版基于ElementUI和SpringBoot怎樣實現Excel導入和導出: 若依管理系統前后端分離版基于ElementUI和SpringBoot怎樣實現Excel導入和導出_若依導出前端獲得到后端的execl流之后怎么操作-CSDN博客 上面講的是Excel的導出&#xff0c;如果是需要根據w…

即插即用篇 | YOLOv8 引入 MHSA 注意力機制 | 《Bottleneck Transformers for Visual Recognition》

論文名稱:《Bottleneck Transformers for Visual Recognition》 論文地址:https://arxiv.org/pdf/2101.11605.pdf 文章目錄 1 原理2 源代碼3 添加方式4 模型 yaml 文件template-backbone.yamltemplate-small.yamltemplate-large.yamltemplate-neck.yaml

Mac 重新安裝系統

Mac 重新安裝系統 使用可引導安裝器重新安裝&#xff08;可用于安裝非最新的 Mac OS&#xff0c;系統降級&#xff0c;需要清除所有數據&#xff09; 插入制作好的可引導安裝器&#xff08;U盤或者移動固態硬盤&#xff09;&#xff0c;如何制作可引導安裝器將 Mac 關機將 Ma…

排序——冒泡排序

冒泡排序的基本思想 從前往后&#xff08;或從后往前&#xff09;兩兩比較相鄰元素的值&#xff0c;若為逆序&#xff08;即 A [ i ? 1 ] < A [ i ] A\left [ i-1\right ]<A\left [ i\right ] A[i?1]<A[i]&#xff09;&#xff0c;則交換它們&#xff0c;直到序列…

MySQL慢查詢分析

1. 什么是慢查詢&#xff1f; 在MySQL中&#xff0c;慢查詢定義為執行時間超過特定閾值的查詢。這個閾值可以通過MySQL的配置選項long_query_time來設置。默認情況下&#xff0c;long_query_time的值是10秒&#xff0c;意味著任何執行時間超過10秒的查詢都會被認為是慢查詢。然…

標準PoE交換機、非標準PoE交換機和非PoE交換機三者到底有何區別?

目錄 前言&#xff1a; 一、標準PoE交換機 1.1 工作原理 1.2 應用場景 1、視頻監控 2、無線接入點 3、IP電話 1.3 優勢 1、簡化布線 2、簡化安裝 3、提高可靠性 二、非標準PoE交換機 2.1 工作原理 2.2 應用場景 1、無線路由器 2、IP電話 3、數據中心 2.3 優勢…

c++面試三 -- 智能指針--7000字

一、智能指針 C 中的智能指針是一種用于管理動態分配的內存的對象&#xff0c;它們可以自動進行內存管理&#xff0c;避免內存泄漏和懸掛指針等問題。 1. 懸掛指針 懸掛指針&#xff08;dangling pointer&#xff09;是指在程序中仍然存在但已經不再指向有效內存地址的指針。懸…