C語言中的一維數組與二維數組

目錄

  • 一維數組
    • 數組的創建
    • 初始化
    • 使用
    • 在內存中的存儲
  • 二維數組
    • 創建
    • 初始化
    • 使用
    • 在內存中的存儲
  • 數組越界

一維數組

數組的創建

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

int arr1[10];
char arr3[10];
float arr4[10];
double arr5[10];

下面這個數組能否成功創建?

int count = 10;
int arr2[count];

**注:**在C99標準之前, [] 中要給一個常量才可以,不能使用變量。在C99標準支持了變長數組的概念,數組的大小可以使用變量指定,但是數組不能初始化。不過在C90標準下仍然有一些不能實現,所以具體能否實現還是要看編譯環境。

初始化

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'};

這兩行代碼都是給數組初始化為abc三個字符,但是在內存中的分配是不一樣的。
在這里插入圖片描述

使用

我們之前介紹了一個操作符: [] ,下標引用操作符。它其實就數組訪問的操作符。

#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++){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]);

在內存中的存儲

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

我們通過打印地址來觀察數組在內存中的存吃是怎么樣的?
在這里插入圖片描述
十六進制是從0 ~ 9,A ~ F(相當于10~15),觀察輸出的結果,可以發現當下標增長1,元素的地址增加4,從低地址到高地址非常有規律地增加,數組在內存中是連續存放的

二維數組

創建

int arr[3][4];
char arr[3][5];
double arr[2][4];

初始化

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

注意:
二維數組如果有初始化,行可以省略,列不能省略。

int arr[][4] = {{2,3},{4,5}}; //正確寫法
int arr[4][] = {{2,3},{4,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\t", arr[i][j]); //為了好看加制表符并換兩行}printf("\n\n"); }return 0;
}

在內存中的存儲

#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\n", i, j, &arr[i][j]);}}return 0;
}

在這里插入圖片描述
通過觀察我們發現二維數組在內存中也是從低地址到高地址連續存儲的。

數組越界

數組的下標是有范圍限制的。

數組的下規定是從0開始的,如果數組有n個元素,最后一個元素的下標就是n-1。
所以數組的下標如果小于0,或者大于n-1,就是數組越界訪問了,超出了數組合法空間的訪問。

C語言本身是不做數組下標的越界檢查,編譯器也不一定報錯,但是編譯器不報錯,并不意味著程序就是正確的,所以程序員寫代碼時,最好自己做越界的檢查。

#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\n", arr[i]);//當i等于10的時候,越界訪問了}
return 0;
}

在這里插入圖片描述
二維數組也存在行或列可能越界的問題。

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

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

相關文章

Linux上編譯和測試V8引擎源碼

介紹 V8引擎是一款高性能的JavaScript引擎&#xff0c;廣泛應用于Chrome瀏覽器和Node.js等項目中。在本篇博客中&#xff0c;我們將介紹如何在Linux系統上使用depot_tools工具編譯和測試V8引擎源碼。 步驟一&#xff1a;安裝depot_tools depot_tools是一個用于Chromium開發…

學習IO的第七天

作業&#xff1a;使用消息隊列完成兩個進程間的相互通信 #include <head.h>struct msgbuf {long mtype; //消息類型char mtext[1024]; //正文大小 };#define SIZE (sizeof(struct msgbuf)-sizeof(long))int main(int argc, const char *argv[]) {//1.創…

打印一個整數的每一位和求階乘(遞歸和非遞歸的C語言實現)

文章目錄 打印一個整數的每一位思考遞歸非遞歸 求階乘遞歸非遞歸證明0的階乘為1 寫代碼中遇到的VS輸出窗口提示信息為什么VS平臺32位和64位的long都是4字節&#xff1f;%zu是什么格式說明符VS下_int128為什么用不了 打印一個整數的每一位 思考 負數和0都是整數&#xff0c;我…

DevEco Studio將編輯器整體文本改為簡體中文

我們打開編輯器 隨便進入一個項目 這里 我們左上角目錄 選擇 File下面菜單中的 Settings… 打開配置界面 然后在設置窗口左側導航欄中 選擇 Plugins 插件 然后上方導航欄中 選擇 Installed 參考下圖 然后 找到這個Chinese(Simplified) Chinese是什么應該不用我多說吧 我們把…

區塊鏈擴容問題研究【06】

1.Plasma&#xff1a;Plasma 是一種基于以太坊區塊鏈的 Layer2 擴容方案&#xff0c;它通過建立一個分層結構的區塊鏈網絡&#xff0c;將大量的交易放到子鏈上進行處理&#xff0c;從而提高了以太坊的吞吐量。Plasma 還可以通過智能合約實現跨鏈交易&#xff0c;使得不同的區塊…

Python面經【8】- Python設計模式專題-上卷

Python面經【8】- Python設計模式專題-上卷 一、接口二、單例模式(1) 方法一&#xff1a;使用模塊(2) 方法二&#xff1a; 裝飾器實現【手撕 理解】&#xff08;單下劃線 閉包 裝飾器 類方法&#xff09;(3) 方法三&#xff1a;基于__new__方法【new和init 】 設計模式是一…

簡單的 u-popup 彈出框

uniapp中的popup組件可以用于彈出簡單的提示框、操作框、菜單等。它可以通過position屬性控制彈出框的位置&#xff0c;不同的position值會使得彈出框呈現不同的彈出形式 目錄 一、實現思路 二、實現步驟 ①view部分展示 ②JavaScript 內容 ③css中樣式展示 三、效果展示 …

Linux系統---基于Pipe實現一個簡單Client-Server system

顧得泉&#xff1a;個人主頁 個人專欄&#xff1a;《Linux操作系統》 《C/C》 《LeedCode刷題》 鍵盤敲爛&#xff0c;年薪百萬&#xff01; 一、題目要求 Server是一個服務器進程&#xff0c;只能進行整數平方運算。Client要計算一個整數的平方的平方的平方&#xff0c;即…

聊聊 Jetpack Compose 原理 -- 穿透刺客 CompositionLocal

Compose 官方說明一直很簡潔&#xff1a;CompositionLocal 是通過組合隱式向下傳遞數據的工具。 我們先來看一段代碼&#xff1a; class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setCo…

datav-輪播排名-對數據進行處理

前言 對于大屏需求我們排名數據輪播也是經常需要用到的需求&#xff0c;datav也是給我們提供了 不是說我們自己不能寫&#xff0c;而是提供好的輪子比我們自己 寫的&#xff0c;更全面&#xff0c;更周到&#xff0c; 沒有特殊需求的話&#xff0c;使用datav配置一下完成這個…

mysqlsh導入json,最終還得靠navicat導入json

工作需要將一個巨大的10G的json導入mysql數據庫。 看到mysql官方有對json導入的支持。 如下&#xff1a; MySQL :: Import JSON to MySQL made easy with the MySQL Shell $ mysqlsh rootlocalhost:33300/test --import /path_to_file/zips.json Creating a session to root…

產品經理進階:以客戶為中心的8個維度

目錄 簡介 以客戶為中心 流程和組織維度 產品維度 CSDN學院《硬件產品進階課》

python:六種算法(DBO、RFO、WOA、GWO、PSO、GA)求解23個測試函數(python代碼)

一、六種算法簡介 1、蜣螂優化算法DBO 2、紅狐優化算法RFO 3、鯨魚優化算法WOA 4、灰狼優化算法GWO 5、粒子群優化算法PSO 6、遺傳算法GA 二、6種算法求解23個函數 &#xff08;1&#xff09;23個函數簡介 參考文獻&#xff1a; [1] Yao X, Liu Y, Lin G M. Evolution…

讀書筆記 | 自我管理的關鍵是提高執行力

哈嘍啊&#xff0c;你好&#xff0c;我是雷工&#xff01; 有句話說&#xff0c;能管好自己才是真的本事。 自我管理&#xff0c;管好自己很重要。 我們之所以懂得這么多的道理&#xff0c;卻依然過不好這一生&#xff1f; 很大部分原因是因為管不住自己&#xff0c;做不到。 …

性能測試基礎

性能測試分類 客戶端性能&#xff1a;測試APP自身的性能&#xff0c;例如CPU、內存消耗&#xff1b;web頁面元素渲染速度 服務端性能&#xff1a;測試服務端項目程序的支持的并發、處理能力、響應時間等&#xff0c;主要通過接口來做性能測試 性能測試指標 并發 同時向服務…

大一作業習題

第一題&#xff1a;答案&#xff1a; #include <stdio.h> void sort(int a[], int m) //將數組a的前m個元素(從小到大)排序 {int i 0;for (i 0; i < m - 1; i){int j 0;int flag 1;for (j 0; j < m - 1 - i; j){if (a[j] > a[j 1]){int t 0;t a[j];…

Java八股文面試全套真題【含答案】- Servlet篇

以下是一些關于Servlet的經典面試題以及它們的答案&#xff1a; 什么是 Servlet&#xff1f; 答案&#xff1a;Servlet 是運行在服務器上&#xff0c;用于處理客戶端請求并生成響應的 Java 類。 Servlet 和 JSP 之間的區別是什么&#xff1f; 答案&#xff1a;Servlet 是基于…

1.鴻蒙應用程序開發app_hap開發環境搭建

1.下載Node.js, Javascipts的運行環境 node.js版本下載v12.18.3/https://www.cnblogs.com/txwtech/p/17865780.html 2.下載并安裝DevEco Studio DevEco Studio 3.1 DevEco Studio 3.1配套支持HarmonyOS 3.1版本及以上的應用及服務開發&#xff0c;提供了代碼智能編輯、低代…

Docker筆記:Docker中簡單配置Mysql/Redis/Mongodb容器

Docker 配置 Mysql 容器 1 &#xff09;方案1&#xff1a;基于centos等linux操作系統 啟動centos鏡像&#xff0c;在里面安裝 mysql這樣比較麻煩&#xff0c;配置的東西很多 … 2 &#xff09;方案2&#xff1a;直接用 mysql 鏡像 (推薦) $ docker pull mysql 下載鏡像$ do…

589. N 叉樹的前序遍歷

589. N 叉樹的前序遍歷 java1&#xff1a;stack棧&#xff1a;沒看懂 class Solution {public List<Integer> preorder(Node root) {List<Integer> res new ArrayList<Integer>();if (root null) {return res;}Map<Node, Integer> map new HashMa…