C語言:20250719筆記

字符數組

在C語言中,支持字符串常量,不支持字符串變量。如果想要實現類似的字符串變量,C語言提供了兩種實現方式:

  • 字符數組:

?char name[] = “哪吒”;
  • 字符指針:

?char *name = "娜吒";

概念

元素類型為char(字符型)的數組叫做字符數組。字符數組往往是用來存儲字符串數據的。需要注意的,我們C語言中的字符是字節字符(1字符 = 1字節,C語言中沒有字節這個表示法,我們一般使用char表示字節,1char = 8bit)。

硬件中存放數據以bit(位)為單位,系統對于內存的操作以char(字節)為單位。系統為內存以1個字節為單位進行編號。

實驗:

?char a = 'A'; ? ? ?// 正確char b = '1'; ? ? ?// 正確 ASCII碼:49char c = 1; ? ? ? ?// 正確 ASCII碼:1char d = '\n'; ? ? // 正確 只要其對應的 ASCII碼的范圍在0~127之間,都屬于字符char e = "A"; ? ? ?// 錯誤 雙引號括起來的內容叫做字符串常量char f = '馮'; ? ? // 錯誤 中文字符不在0~127這個范圍內
語法

一維數組:

?char 數組名[數組容量];

二維數組:

?char 數組名[行容量][列容量];

字符數組的語法就是我們之前所學的一維數組和二維數組的語法,只不過數據類型是char而已。

注意:

如果我們的char數組初始化的時候,沒有完全初始化值的時候,使用\0(\0對應的ASCII值是0)進行填充。大家要注意,這里的\0只是起到一個占位或者標識的作用,我們是無法通過printf等打印輸出到控制臺的(不支持輸出)。

比如:

?char c[8] = {'h','e','l','l','o'}; //一維的字符數組的初始化,未初始化部分補'\0'或者0char c[8] = {'h','e','l','l','o','\0','\0','\0'};

案例1

案例1
  • 需求:輸出一個字符序列(I LOVE YOU)

  • 代碼:

    /*************************************************************************> File Name: ?  demo03.c> Author: ? ? ? 阮> Description: ?> Created Time: 2025年07月19日 星期五 14時29分35秒************************************************************************/?#include <stdio.h>?int main(int argc,char *argv[]){// 創建一個數組,用來存儲I LOVE YOU ? 空格' '也是字符,對應的ASCII 為 32char arr[] = {'I',' ','L','O','V','E',32,'Y','O','U'}; ??// 計算數組的大小int len = sizeof(arr) / sizeof(arr[0]);?// 遍歷數組for (int i = 0; i < len; i ++) printf("%c",arr[i]);?printf("\n");?return 0; }?

結果:

案例2
  • 需求:輸出一個用字符*組成的空菱形圖案。

  • 代碼:

/*************************************************************************> File Name: ?  demo04.c> Author: ? ? ? 阮> Description: ?> Created Time: 2025年07月19日 星期五 14時40分11秒************************************************************************/?#include <stdio.h>?int main(int argc,char *argv[]){// 創建一個二維數組,存放菱形char arr[5][5] = {{' ',' ','*',' ',' '},{' ','*',' ','*',' '},{'*',' ',' ',' ','*'},{' ','*',' ','*',' '},{' ',' ','*',' ',' '}};?// 計算行和列的大小int row_len = sizeof(arr) / sizeof(arr[0]);int col_len = sizeof(arr[0]) / sizeof(arr[0][0]);?// 遍歷數組for (int i = 0; i < row_len; i++){for (int j = 0; j < col_len; j++) printf("%c",arr[i][j]); printf("\n");}?printf("\n");?return 0;}
結果:

注意
  • 如果定義時,不初始化,元素值不確定(局部作用域)

     char arr1[2]; ? // 此時,這個數組中元素的值是隨機值char arr2[3] = {'a','b','c'}; // 此時屬于部分初始化,未初始化的元素使用 \0 填充char arr3[3] = {}; ?// 此時所有的元素使用 \0 填充char arr4[3] = {0}; // 此時所有的元素使用 \0 填充
  • 如果提供的字符個數大于數組長度,則按照語法錯誤處理(會報警告,但是能編譯通過);如果字符個數小于數組長度,后面的元素自動補\0

    ?char arr1[2] = {'h','e','e'}; ? // 編譯通過,但是會報警告(warning),不建議寫,實際存放的是 hechar arr2[3] = {'a'}; ? ? ? ? ? // 正確寫法,部分初始化,未初始化部分補 \0
  • 如果提供的字符個數與數組長度相同,可以省略數組長度,系統會自動確定元素的個數,適合字符較多時。

    ?char arr1[] = {'b','u'}; // 正確,根據初始化元素,由系統自動計算元素個數
字符串結束標志

說明

  • C語言規定,字符串常量以字符\0作為結束標志。

  • 編譯系統對字符串常量自動加一個\0作為結束標志。 char *name = "tom",實際存儲為{'t','o','m','\0'}

  • 程序中往往通過判斷\0來檢測字符串是否結束。舉例:while(arr[i] != '\0'){..}

  • \0的ASCII碼是0,不是一個可顯示可輸出的字符,是“空操作符”。它什么都不做,不會增加有效字符,僅僅用作一個工程判別的標志或者在數組中占位。

     char a[] = {'h','i'}; ? ? ? ?// 輸出:hichar a[] = {'h','i','\0'}; ? // 輸出:hichar c[] = "hello"; ? ? ? ? ?// 輸出:hello,實際存儲:hello\0  將字符串常量賦值給字符數組 ? 
字符數組的多樣表示

我們的char數組可以以數組的形式一個一個輸出每個字符;也可以以字符串的形式整體輸出。

  • 演示:

/*************************************************************************> File Name: ?  demo05.c> Author: ? ? ? 阮> Description: ?> Created Time: 2025年07月19日 星期五 15時31分37秒************************************************************************/?#include <stdio.h>?int main(int argc,char *argv[]){// 字符串的第1種表示:char s1[] = {'h','e','l','l','o',' ','w','o','r','l','d','\0'};// 字符個數:12// 字符串的第2種表示:char s2[] = {"hello world"};// ""包裹的內容是字符串常量,字符串常量默認末尾有一個\0  字符個數:12// 字符串的第3種表示:char s3[] = "hello world"; // 字符個數:12?// 字符串的第1種輸出:// 計算字符串所占字節數printf("s1=%lu,s2=%lu,s3=%lu\n", sizeof(s1), sizeof(s2), sizeof(s3)); // s1=12,s2=12,s3=12?// 計算數組大小int len = sizeof(s3) / sizeof(s3[0]);?// 遍歷for (int i = 0; i < len; i++){// 過濾\0if (s1[i] == 0 || s2[i] == '\0' || s3[i] == 0) continue;?printf("%c,%c,%c\n", s1[i], s2[i], s3[i]);}printf("\n");??// 字符串的第2種輸出:printf("%s,%s,%s\n",s1,s2,s3);printf("\n");?return 0;}
結果:

注意
  • 字符串的長度與字符數組的長度不一定相同。

     char name[] = "hello"; ?// 數組長度:6,字符串長度:5
  • 利用字符串常量可以對字符數組進行初始化,但不能用字符串常量對字符數組賦值。

    // 正確演示:利用字符串常量給字符數組初始化
    
     char arr1[] = "hello";
    // 錯誤演示:利用字符串常量給字符數組賦值
    
     char arr2[6];arr2 = "hello"; ?// 可以理解為,數組是一個常量

章節作業

一維數組練習題

  1. 鍵盤錄入一組數列,利用冒泡排序將數據由大到小排序

  2. 從鍵盤輸入年、月、日,計算并輸出該日是該年第幾天

  3. 鍵盤錄入一組數列,求最大數、最小數、均值

  4. 從鍵盤錄入一組數列,判斷是否是回文,舉例:12321,abba,121

  5. 用數組存儲10個整型數,通過鍵盤輸入一個數,找出該數在數組中的下標值

  6. 通過鍵盤輸入 10 個學員成績: 1)輸出不及格學員的成績和下標。 2)求最高分的下標值 3)求最低成績的下標值 4)求總成績及平均成績

二維數組練習題

  1. 一個二維數組賦了初值,用戶輸入一個數,在該二維數組中查找。找到則返回行列位置,沒找到則提示。

  2. 二維整型數組,求所有元素平均值,求每行最大值,求每列最小值。

  3. 在行列相等數組計算主對角線元素的和

  4. 計算一個矩陣下三角元素的和

  5. 電影院為了答謝影迷的支持,在某一排的某一列座位上放置了一個大禮包,放置禮物的位置具有這樣的規則(行和列的平方和為開店日期 512(5月12日)); 請設計程序找出大禮包的位置,(假定電影院有20排,每排25個座位)

字符數組練習題

  1. 編寫一個程序,讀取用戶輸入的字符串,并將其反轉輸出。

  2. 編寫一個程序,判斷用戶輸入的字符串是否為回文(即正反讀都一樣的字符串)。

思考題【選做】

  1. 求出一個矩陣的鞍點。鞍點的含義為行上最大同時列上也最大。

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

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

相關文章

decltype是什么,什么作用?

基本概念decltype 是 C11 引入的關鍵字&#xff0c;用于推導表達式的類型&#xff0c;且會完整保留類型的細節&#xff08;包括 const、引用 &、指針 * 等&#xff09;。語法:decltype(表達式) 變量名核心特點1.推導依據是表達式本身&#xff0c;而非表達式的結果&#xff…

RPC 與 Feign 的區別筆記

一、基本概念 1.1 RPC&#xff08;Remote Procedure Call&#xff09; 定義&#xff1a;遠程過程調用&#xff0c;允許像調用本地方法一樣調用遠程服務的方法。 本質&#xff1a;跨進程通信&#xff0c;隱藏了底層網絡通信的復雜性。 常見實現&#xff1a; Java 原生 RMIDub…

高防IP能夠防御CC攻擊嗎?它具備哪些顯著優勢?

摘要&#xff1a; 面對日益復雜的網絡攻擊&#xff0c;高防IP作為重要的安全工具&#xff0c;不僅能防御常見的DDoS攻擊&#xff0c;還能有效應對CC攻擊。本文將解析高防IP防御CC攻擊的原理及其核心優勢&#xff0c;幫助讀者了解其在網絡安全中的關鍵作用。一、高防IP能否防御C…

TypeScript 類型注解(一)

一、TypeScript 類型注解1、什么是TpyeScript類型注解- 是否還記得TypeScript的兩個重要特性&#xff1f;- 類型系統、適用于任何規模- 可以說&#xff0c;TS的類型系統是TS最重要的功能&#xff1b;那么什么是類型注解呢&#xff1f;其實就是在聲明變量時&#xff0c;將變量的…

弗蘭肯斯坦式的人工智能與GTM策略的崩潰

2025 年上半年已經明確了一件事&#xff1a;B2B 市場營銷團隊被工具淹沒&#xff0c;但缺乏策略。人工智能無處不在。收入領導者在進行無休止的試點。營銷團隊拼湊各種點解決方案&#xff0c;希望能實現規模擴張。然而&#xff0c;銷售線索的增長停滯不前。信譽正在受損。曾經承…

NAND閃存(NAND Flash)是什么?

NAND閃存(NAND Flash)是什么? NAND閃存(NAND Flash)詳解 NAND閃存是一種非易失性存儲介質(斷電不丟失數據),廣泛應用于SSD、U盤、手機存儲等設備中。NAND Flash 的全稱是 “Negative-AND Flash”(與非型閃存),其名稱源自其底層存儲單元的電路結構——基于**“與非門…

Android性能優化之UI渲染優化

一、UI渲染核心瓶頸深度解析 1. 渲染管線關鍵階段階段CPU工作GPU工作潛在卡頓點Measure計算View尺寸-嵌套布局多次測量Layout計算View位置-頻繁重排(Relayout)Draw構建DisplayList指令集-復雜自定義View.onDraw()Sync & Upload資源上傳到GPU內存紋理上傳大圖/未壓縮資源Ras…

基于Spring AI Alibaba的智能知識助手系統:從零到一的RAG實戰開發

&#x1f4d6; 項目概述 在人工智能快速發展的今天&#xff0c;RAG&#xff08;Retrieval-Augmented Generation&#xff09;技術已成為構建智能問答系統的核心技術。本文將詳細介紹一個基于Spring AI Alibaba DashScope深度集成的智能知識助手系統的完整開發過程&#xff0c;…

VirtualBox + CentOS:啟用 DHCP 獲取 IPv4 地址

標題&#xff1a; VirtualBox CentOS&#xff1a;啟用 DHCP 獲取 IPv4 地址 日期&#xff1a; 2025-07-18 一、問題現象 最小化安裝的 CentOS 7 虛擬機里敲&#xff1a; ip addr輸出只有 lo 的 127.0.0.1 以及 enp0s3 的 IPv6 鏈路本地地址&#xff0c;沒有 IPv4&#xff0…

Git

Git簡介Git 是一個分布式版本控制工具&#xff0c;通常用來對軟件開發過程中的源代碼文件進行管理。通過Git 倉庫來存儲和管理這些文件&#xff0c;Git 倉庫分為兩種:本地倉庫:開發人員自己電腦上的 Git倉庫。遠程倉庫:遠程服務器上的 Git 倉庫。commit: 提交, 將本地文件和版本…

通信算法之294:LTE系統中的整數倍頻偏估計

在LTE系統中&#xff0c;整數倍頻偏估計主要通過以下方法實現&#xff1a;一、最大似然估計法&#xff08;ML&#xff09;通過遍歷預設的整數倍頻偏范圍&#xff08;如30kHz&#xff09;&#xff0c;將接收信號與本地的PSS序列在不同頻偏點上進行相關運算&#xff0c;選擇相關峰…

數字人直播:開啟直播行業新紀元?

?原始尺寸更換圖片p9-flow-imagex-sign.byteimg.com??在科技日新月異的當下&#xff0c;直播行業正經歷著一場深刻變革&#xff0c;數字人直播的興起&#xff0c;宛如一顆璀璨新星&#xff0c;照亮了直播領域的新征程。數字人直播&#xff0c;是利用先進的人工智能技術&…

朝鮮升級供應鏈惡意軟件XORIndex,再次瞄準npm生態系統

Socket威脅研究團隊最新披露&#xff0c;朝鮮國家支持的黑客組織在"傳染性面試"攻擊活動中采用了新型惡意軟件加載器XORIndex&#xff0c;該惡意程序專門通過npm軟件包注冊表滲透軟件供應鏈。攻擊規模與持續性此次攻擊并非孤立事件&#xff0c;而是針對開發者、求職者…

Windows 下 VS2019 編譯 libevent-2.1.10 庫

1. 你需要VS2019 編譯好openssl-1.1.1 &#xff0c;這個具體編譯或者下載可以參考我的博客openssl生成的庫是這兩個文件接下來&#xff0c;打開CMake &#xff0c;主要是下面的需要設置好最后Config Generate即可&#xff1b;全部成功生成 22個然后INSTALL右鍵生成 最后看下生…

Vim多列操作指南

我們在使用 Vim 時&#xff0c;經常需要同時編輯多個文件&#xff0c;或者同一個文件的不同部分。Vim 提供了分割窗口&#xff08;split&#xff09;和垂直分割窗口&#xff08;vsplit&#xff09;的功能&#xff0c;允許我們在同一個 Vim 會話中查看多個緩沖區&#xff08;buf…

Python網絡爬蟲實現selenium對百度識圖二次開發以及批量保存Excel

一.百度識圖自動上傳圖片from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.common.by import By edge_options Options() edge_options.binary_location r"C:\Program Files (x86)\Microsoft\Edge\Applica…

Vue中的refs字段使用記錄

這段代碼是 Vue.js 中結合 Element UI 等 UI 庫的典型表單驗證寫法&#xff0c;具體含義如下&#xff1a;代碼拆解 this.$refs.fromData.validate((valid) > {// 驗證后的回調邏輯 })this.$refs.fromData $refs 是 Vue 提供的特殊屬性&#xff0c;用于訪問模板中通過 ref&qu…

多方案對比分析:后端數據加密策略及實踐

多方案對比分析&#xff1a;后端數據加密策略及實踐 隨著互聯網業務對用戶隱私和數據安全的要求不斷提升&#xff0c;后端系統中對敏感數據的加密保護已成為必備需求。從對稱加密、非對稱加密到數據庫透明加密、應用層字段加密&#xff0c;各種方案各有特點。本文將以方案對比分…

《Java語言程序設計》1.4 復習題

1.4.1 什么是操作系統?列出一些流行的操作系統?操作系統(Operating System)是運行在計算機上的最重要的程序。操作系統管理和控制計算機的活動。通用計算機的流行操作系統有Microsoft Windows、Mac OS以及Linux。如果沒有在計算機上安裝和運行操作系統&#xff0c;像Web瀏覽器…

OpenCV圖像自動縮放(Autoscaling)函數autoscaling()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數用于對輸入圖像進行自動縮放&#xff08;Autoscaling&#xff09;&#xff0c;即根據輸入圖像的像素值范圍將其線性映射到一個新的范圍內&am…