6.數組和字符串

在C語言中,數組和字符串是基礎且重要的概念。它們用于存儲和操作一系列相同類型的元素或字符序列。

數組

1. 數組定義與初始化

數組是一系列相同類型的數據項的集合,這些數據項可以通過一個共同的名字來引用。數組中的每個元素都有一個索引(也稱為下標),從0開始計數。

  • 定義type arrayName[arraySize];

    示例:int numbers[5]; 定義了一個包含5個整數的數組。

  • 初始化

    • 在定義時初始化:int numbers[] = {1, 2, 3, 4, 5};
    • 或者指定大小并初始化:int numbers[5] = {1, 2, 3};?剩余元素自動初始化為0。
2. 訪問數組元素

通過索引來訪問數組中的元素,如 arrayName[index]。例如,numbers[0] 返回數組的第一個元素。

3. 多維數組

C語言支持多維數組,最常見的是二維數組,可以將其視為表格形式。

  • 定義與初始化int matrix[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
一維數組的遍歷
#include <stdio.h>int main() {int arr[] = {10, 20, 30, 40, 50};int length = sizeof(arr) / sizeof(arr[0]);  // 計算數組長度printf("數組元素為:\n");for (int i = 0; i < length; i++) {printf("arr[%d] = %d\n", i, arr[i]);}return 0;
}

數組可以分配在棧內存堆內存中,具體取決于數組是如何聲明和定義的。

?

棧內存中的數組

當你在一個函數內部直接聲明一個數組時(即沒有使用動態內存分配函數如 malloc),這個數組是分配在棧內存上的。棧內存是由編譯器自動分配和釋放的,它的生命周期與變量的作用域緊密相關。一旦函數執行完畢,棧上的數組所占用的內存會自動被釋放。

堆內存中的數組

如果你想在運行時確定數組的大小或者希望數組在其聲明的作用域之外繼續存在,你可以使用動態內存分配函數(如 malloc, calloc, realloc)來在堆內存上分配數組。堆內存需要手動管理,意味著你需要明確地使用 free 函數來釋放你分配的內存,否則可能會導致內存泄漏。

  • :適用于大小固定、生命周期與作用域相關的數組。棧上的分配和釋放速度通常比堆快。
  • :適用于需要在運行時確定大小、或者希望其生命周期超出當前作用域的數組。不過,堆的分配和釋放相對較慢,并且需要程序員手動管理內存。

字符串

在C語言中,字符串實際上是一個以空字符 \0 結尾的一維字符數組。

1. 字符串定義與初始化
  • 直接定義:char greeting[] = "Hello";
  • 或者手動添加終止符:char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
2. 字符串處理函數

標準庫提供了許多用于操作字符串的函數,需包含頭文件 <string.h>

  • strlen(s):計算字符串?s?的長度。
  • strcpy(dest, src):將字符串?src?復制到?dest
  • strcat(dest, src):將字符串?src?連接到?dest?后面。
  • strcmp(s1, s2):比較兩個字符串?s1?和?s2
3. 注意事項
  • C語言不檢查數組越界,因此編寫代碼時要特別小心不要超出數組界限。
  • 對于字符串,忘記添加結束符?\0?可能會導致未定義行為。

中文處理

使用?char[]?+ UTF-8 編碼(推薦)

UTF-8 是互聯網通用編碼,支持中文,且兼容 ASCII。

示例:
#include <stdio.h>
#include <windows.h>  // Windows onlyint main() {SetConsoleOutputCP(65001);  // 設置控制臺輸出為 UTF-8char str[] = "你好,世界!";printf("%s\n", str);for (int i = 0; str[i] != '\0'; i++) {printf("%02X ", (unsigned char)str[i]);}printf("\n");return 0;
}

  • 你的源代碼文件必須保存為?UTF-8?編碼(否則中文會亂碼)。
  • 在 Windows 控制臺中顯示 UTF-8 中文時,可能需要設置控制臺編碼為 UTF-8:
  • 在 編譯選項里,添加utf-8
  1. 選擇“配置屬性”“C/C++”>“命令行”屬性頁>。

  2. 在“附加選項”中,添加?選項以指定首選編碼。/utf-8

  3. 選擇“確定”以保存更改 。

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

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

相關文章

odoo代碼分析(一)

Odoo 是一套基于網絡的開放式源代碼商業應用套件,既可以作為獨立應用運行,也可以作為集成的全功能 ERP 系統使用。Odoo 平臺采用模塊化架構,允許組織根據自身需求起步,并在需求增長時擴展功能。 什么是 Odoo? Odoo 提供了一個完整的商業應用生態系統,包括: 客戶關系管…

從“人工眼”到‘智能眼’:EZ-Vision視覺系統如何重構生產線視覺檢測精度?

制造業是我國實體經濟的基礎&#xff0c;是國內經濟增長的重要引擎。制造業智能化建設是當下的必然趨勢&#xff0c;然而目前依舊有很多中小型企業因為成本原因&#xff0c;無法加快智能化制造的步伐。在智能檢測領域更是如此&#xff0c;很多企業依舊在采用人工檢測&#xff0…

Etcd原理基礎學習

etcd 是一個開源的分布式鍵值存儲系統&#xff0c;專注于提供高可用性、強一致性的數據存儲與訪問&#xff0c;廣泛應用于分布式系統的服務發現、配置管理和協調任務。以下是其核心特性和應用場景的詳細介紹。接下來就看看Etcd如何實現服務注冊&#xff0c;以及如何通過Raft算法…

【硬件-筆試面試題】硬件/電子工程師,筆試面試題-32,(知識點:模數轉換器,信噪比,計算公式,)

目錄 1、題目 2、解答 步驟一&#xff1a;明確理想 ADC 的信噪比公式 步驟二&#xff1a;推導公式的來源 步驟三&#xff1a;得出答案 3、相關知識點 一、信噪比&#xff08;SNR&#xff09;的定義 二、理想 ADC 的量化噪聲 三、滿量程正弦波信號的功率 四、信噪比公…

Redis過期數據的刪除策略是什么?有哪些?

定時刪除&#xff1a;- 每個設置了TTL的key中都會創建一個計時器&#xff0c;等到過期時間就會立即刪除- 對內存友好&#xff0c;但是會占用大量的CPU資源去處理過期數據&#xff0c;從而影響緩存的吞吐量和響應時間惰性刪除&#xff1a;- 設置了key的過期后&#xff0c;不會立…

linux dd命令詳解

dd 是一個功能強大的 Unix/Linux 命令行工具&#xff0c;用于低級別的字節流操作&#xff0c;常用于創建、復制、轉換和處理文件或設備數據。它在 macOS 和 Linux 系統上都可用&#xff0c;但在 macOS 上有一些細微差異。本文將詳細講解 dd 命令的用法&#xff0c;包括參數、常…

多線程同步技術是用于協調多個線程訪問共享資源或執行順序的機制,以避免數據競爭、死鎖、線程不安全等問題

多線程同步技術是用于協調多個線程訪問共享資源或執行順序的機制,以避免數據競爭、死鎖、線程不安全等問題。 在提供的代碼中,存在多線程操作加熱板的場景,涉及鎖競爭和硬件資源訪問,優化多線程同步可以顯著提升程序性能和穩定性。 以下是多線程同步技術的詳細解釋、常見…

CRMEB標準版,從創建數據表到實現最基礎增刪改查的實現過程

很多使用了CRMEB單商戶系統的童鞋在進行二開的時候&#xff0c;都會遇到新建了數據表之后不知道對數據表怎么進行操作。那么&#xff0c;這篇文章將帶你完整的實現一遍&#xff0c;以后就不會怕啦。一、創建數據表就以最簡單的為例&#xff0c;創建一個學生的信息表編號姓名性別…

J2EE模式---數據訪問對象模式

數據訪問對象模式基礎概念數據訪問對象模式&#xff08;Data Access Object Pattern&#xff0c;簡稱 DAO 模式&#xff09;是一種結構型設計模式&#xff0c;其核心思想是將數據訪問邏輯與業務邏輯分離&#xff0c;通過一個抽象層&#xff08;DAO&#xff09;來處理數據的持久…

【OpenCV篇】OpenCV——02day.圖像預處理(1)

目錄 前言 一、圖像色彩空間轉換 1 RGB顏色空間 2 顏色加法 3 顏色加權加法 4 HSV顏色空間 5 RGB轉Gray(灰度) 二、灰度實驗 1 灰度圖 2 最大值法 3 平均值法 4 加權均值法 5 兩個極端的灰度值 三、圖像二值化處理 二值圖像 1 閾值法(THRESH_BINARY) 2 反閾值…

經典IDE之Turbo C

寫的程序不多&#xff0c;換過的 IDE 不少&#xff0c;本文將列舉曾經用過的不同 C 語言相關的 IDE 環境&#xff0c;既是紀念&#xff0c;也是回憶。值得注意的是 IDE 的出現是為了提高開發效率&#xff0c;有一個相對成熟的編譯環境和程序。從編程的角度來看&#xff0c;過分…

Go 多模塊倉庫標簽管理教程

為了方便自己開發&#xff0c;自己寫了個小工具&#xff1a;DzhGO 代碼生成工具 功能特點標題 初始化項目基礎結構生成插件模塊代碼生成模型和實體代碼生成服務接口和實現代碼支持 admin 和 app 兩種模塊類型生成項目基礎目錄 具體介紹看倉庫&#xff1a; https://github.co…

IDEA 類上方注釋 簽名

File -->settings–>Editor–>File and Code Templates–>class新建 Class 類上方添加內容&#xff1a;/*** author Jagger* since ${DATE} ${TIME}*/

衛星通信終端天線對星之:參考星對星

我們在前面的文章中介紹了3種衛星通信終端的對星模式&#xff0c;分別是&#xff1a; 衛星通信終端天線的5種對星模式之一&#xff1a;信標跟蹤 衛星通信終端天線的5種對星模式之二&#xff1a;功率檢測型載波跟蹤 衛星通信終端天線的5種對星模式之二&#xff1a;DVB跟蹤 今…

來自麻省理工和AI制藥公司 Recursion 的結構與結合親和力預測模型Boltz-2,解決小分子藥物發現的關鍵問題

1. Boltz-2介紹 文章來源&#xff1a;http://jeremywohlwend.com/assets/boltz2.pdf 開源代碼來源&#xff1a;https://github.com/jwohlwend/boltz 該AI模型由麻省理工學院計算機科學與人工智能實驗室與上市AI制藥公司Recursion一起開發&#xff0c;雙方在Boltz-1的基礎之上…

從零用java實現 小紅書 springboot vue uniapp(14) 集成阿里云短信驗證碼

從零用java實現 小紅書 springboot vue uniapp&#xff08;14&#xff09; 集成阿里云短信驗證碼 移動端演示 http://8.146.211.120:8081/#/ 管理端演示 http://8.146.211.120:8088/#/ 項目整體介紹及演示 前言 在現代應用中&#xff0c;手機號不僅是用戶的唯一標識&#xff0…

`<< EOF` 與 `<< ‘EOF‘` 與 `<< “EOF“`有無引號的區別多回答筆記250722

<< EOF 與 << EOF 與 << "EOF"有無引號的區別多回答筆記250722 實測 自測代碼: # 定義變量 hello"ni hao"# 無引號 tee << EOF # 無引號 ${hello} world \n $(date) # 無引號 EOF# 單引號 tee << EOF # 單…

點擊按鈕滾動到底功能vue的v-on:scroll運用

使用vue自帶的監聽滾動功能v-on:scroll&#xff0c;滾動條變化時&#xff0c;會調用方法 checkScrollStatus&#xff0c;如果滾動條在容器底部時&#xff0c;則隱藏按鈕&#xff0c;否則顯示按鈕&#xff0c;點擊按鈕能一鍵滾動到底部。<div class"chat-area" ref…

Linux下編譯SLEPc

本文記錄在Linux下編譯安裝SLEPc的流程。 一、下載代碼 git clone https://github.com/slepc/slepc.git cd ./slepc二、安裝依賴 2.1 安裝PETSc 參見: <Linux下編譯安裝PETSc> 2.2 安裝intel oneAPI sudo apt install intel-oneapi-base-toolkit sudo apt install i…

【無標題】qwen3-8b 強化學習訓練后的模型,可以接著 進行其他grpo 強化學習訓練 嗎

ser_count’, 0),)} {((‘valid_user_count’, 1),)} 44 0.0 88 [0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.0, 0.6, 0.0, 0.6, 0.0, 0.6] 55 100%|???{‘loss’: 0.0132, ‘grad_norm’: 0.07552657276391983, ‘learning_rate’: 2e-06, ‘num_tokens’: 2098…