C語言期末復習筆記(下)

目錄

九、指針

1.指針變量的定義和初始化

2.間接尋址符*

?3.按值調用和按址調用

4.實例

5.函數指針

6.指針變量和其它類型變量的對比

十、字符串

1.字符串常量

2.字符串的存儲

3.字符指針

4.字符串的訪問和輸入/輸出

5.字符串處理函數

(1)strlen(計算字符串長度)

(2)strcpy(字符串復制)

(3)?strcat(字符串連接)

(4)strcmp(字符串比較)

?(5)實例

(6)其它函數

6.向函數傳遞字符串

7.自己實現字符串處理函數

(1)MyStrcpy

(2)MyStrlen?

(3)MyStrcat?

十一、?指針和數組

1.指針和一維數組的關系

2.指針和二維數組的關系

3.指針或數組參數傳參注意

4.指針數組

gets和puts的使用

5.指針數組用來表示命令行參數

6.C程序的內存映像

7.動態內存分配函數

十二、結構體

1.結構體類型的聲明

2.結構體變量的定義

3.用typedef定義數據類型

4.結構體變量的初始化

5.嵌套的結構體

6.結構體變量的引用?

7.結構體所占內存的字節數

8.結構體數組的定義和初始化

9.結構體指針的定義和初始化

10.向函數傳遞結構體

十三、共用體?

?十四、枚舉數據類型


九、指針

1.指針變量的定義和初始化

指針變量使用之前必須初始化

?2.間接尋址符*

引用指針所指向的變量的值稱為指針的解引用

?3.按值調用和按址調用

指針變量作函數參數可以修改實參的值

4.實例

?

當函數需要給回主函數兩個或兩個以上參數時,無法使用return返回值進行返回,就可以采用指針變量傳參的方式

5.函數指針

?使用函數指針

?

?6.指針變量和其它類型變量的對比

十、字符串

1.字符串常量

2.字符串的存儲?

3.字符指針

?4.字符串的訪問和輸入/輸出

?

對于scanf來說,空格、回車或制表(Tab)符是輸入數據的分隔符,因而不能被讀入,輸入遇到這些字符時,系統認為字符串輸入結束?

例如:

?fgets()函數的最大讀取大小是其“第二個參數減1”,這是由于字符串是以’\0’為結束符的,fgets()為了保證輸入內容的字符串格式,當輸入的數據大小超過了第二個參數指定的大小的時候,fgets()會僅僅讀取前面的“第二個參數減1”個字符,而預留1個字符的空間來存儲字符串結束符’\0’

5.字符串處理函數

(1)strlen(計算字符串長度)

結果是5?

(2)strcpy(字符串復制)

?

(3)?strcat(字符串連接)

(4)strcmp(字符串比較)

?(5)實例

(6)其它函數

6.向函數傳遞字符串

?7.自己實現字符串處理函數

(1)MyStrcpy

(2)MyStrlen?

(3)MyStrcat?

?

十一、?指針和數組

1.指針和一維數組的關系

數組名是一個常量指針,不能修改該指針的指向

指針可當數組名使用

2.指針和二維數組的關系

行地址?

?

列地址?

行指針?

列指針?

?二維數組傳入函數

?

?3.指針或數組參數傳參注意

4.指針數組

gets和puts的使用

1、gets() 的作用是從鍵盤上讀取字符串,跟scanf() 相似,但又有所不同。
gets() 函數的用法:


gets(字符串的首地址);


例:

char str [20]; .
gets(str);


須要注意的是:
(1) gets() 可以接收空格、Tab鍵, 碰到回車鍵輸入才結束;而scanf碰到空格、回車、Tab鍵 都會結束輸入。
(2) gets() 和scanf() 都不能檢測越界。

2、puts() 的作用是 向顯示屏輸出字符串并換行。
用法:
puts (字符串的首地址) ;

例:
char[]=" helloworld";
pus(str);


printf需要添加"\n'用來換行,而puts在 輸出的時候會將字符串末尾的\0'自動換成\n'

5.指針數組用來表示命令行參數

?

6.C程序的內存映像

?7.動態內存分配函數

?

malloc()?

?calloc

注意?:int (*p)[3]和int *p[3]的區別如下:

1. 聲明的含義

  • int (*p)[3]

    • 這是一個指針,指向一個包含 3 個?int?元素的數組。
    • p?是一個指針,它所指向的數據類型是?int[3](一個有 3 個?int?元素的數組)。
  • int *p[3]

    • 這是一個數組,數組的元素是?int?類型的指針。
    • p?是一個數組,該數組包含 3 個元素,每個元素的類型是?int*(指向?int?的指針)。

2. 內存布局和使用示例

  • int (*p)[3]

  • #include <stdio.h>
    int main() {int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};int (*p)[3];  // 定義一個指針,指向一個包含 3 個 int 元素的數組p = arr;  // 讓 p 指向 arr 的第一行// 訪問元素for (int i = 0; i < 2; ++i) {for (int j = 0; j < 3; ++j) {printf("%d ", (*p)[j]);  // 先解引用 p 得到數組,再通過 [] 訪問元素}p++;  // 指向下一個 3 元素的數組}return 0;
    }

  • 在這個例子中,p?是一個指針,它可以指向一個?int[3]?類型的數組。當我們將?p?指向?arr?的第一行時,通過?(*p)[j]?來訪問元素。p++?操作會讓?p?指向下一個包含 3 個?int?的數組(在二維數組中,即下一行)。

int *p[3]

#include <stdio.h>
int main() {int a = 1, b = 2, c = 3;int *p[3];  // 定義一個數組,元素是 int 指針p[0] = &a;p[1] = &b;p[2] = &c;// 訪問元素for (int i = 0; i < 3; ++i) {printf("%d ", *(p[i]));  // 先通過 [] 獲取指針,再解引用}return 0;
}
  • 這里?p?是一個數組,存儲了 3 個?int?指針。p[0]p[1]?和?p[2]?分別存儲了?ab?和?c?的地址,通過?*(p[i])?來訪問它們指向的?int?元素。

3. 指針運算和內存地址

  • int (*p)[3]

    • 當對?p?進行指針運算(如?p++)時,p?的地址會增加?3 * sizeof(int),因為它指向的是一個包含 3 個?int?元素的數組,每次移動到下一個這樣的數組。
  • int *p[3]

    • 對于?p[i](其中?i?從 0 到 2),p[i]?是?int*?指針,當對?p[i]?進行指針運算時,其地址會增加?sizeof(int),因為它們指向的是單個?int?元素。

4. 總結

  • int (*p)[3]?強調的是一個指針,該指針專門指向包含 3 個?int?元素的數組,適合用于處理二維數組,其中第二維大小固定為 3。
  • int *p[3]?是一個數組,其中存儲的元素是?int?指針,可存儲 3 個不同?int?變量的地址,可指向不同位置的?int?元素,使用更靈活,可指向不同長度的?int?數組或不同的?int?元素。

十二、結構體

1.結構體類型的聲明

這時還沒有聲明結構體變量?

2.結構體變量的定義

3.用typedef定義數據類型

?4.結構體變量的初始化

5.嵌套的結構體

6.結構體變量的引用?

7.結構體所占內存的字節數

8.結構體數組的定義和初始化

?

9.結構體指針的定義和初始化

?

10.向函數傳遞結構體

?

?

例題

?

十三、共用體?

?

?十四、枚舉數據類型

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

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

相關文章

1、藍牙打印機環境搭建

本項目采用stm32f103c8T6芯片&#xff0c;通過庫函數實現打印功能&#xff0c;并配置有小程序藍牙通信上位機。 1、創建文件夾目錄 core文件夾存放核心庫文件 LIB文件夾存放標準庫函數文件 這里可以刪減&#xff0c;用不到的可以不要。 obj存放編譯后的文件 project存放項目…

IJCNN2025 投稿準備

投稿格式要求&#xff1a; IEEE - Manuscript Templates for Conference Proceedings 投稿網址&#xff1a; Conference Management Toolkit - Login

多輸入多輸出 | Matlab實現WOA-CNN鯨魚算法優化卷積神經網絡多輸入多輸出預測

多輸入多輸出 | Matlab實現WOA-CNN鯨魚算法優化卷積神經網絡多輸入多輸出預測 目錄 多輸入多輸出 | Matlab實現WOA-CNN鯨魚算法優化卷積神經網絡多輸入多輸出預測預測效果基本介紹模型背景程序設計參考資料 預測效果 基本介紹 Matlab實現WOA-CNN鯨魚算法優化卷積神經網絡多輸入…

Leecode刷題C語言之切蛋糕的最小總共開銷②

執行結果:通過 執行用時和內存消耗如下&#xff1a; typedef struct {int *booked;int bookedSize; } MyCalendar;#define MAX_BOOK_SIZE 1001MyCalendar* myCalendarCreate() {MyCalendar *obj (MyCalendar *)malloc(sizeof(MyCalendar));obj->booked (int *)malloc(siz…

力扣-數據結構-10【算法學習day.81】

前言 ###我做這類文章一個重要的目的還是給正在學習的大家提供方向&#xff08;例如想要掌握基礎用法&#xff0c;該刷哪些題&#xff1f;建議靈神的題單和代碼隨想錄&#xff09;和記錄自己的學習過程&#xff0c;我的解析也不會做的非常詳細&#xff0c;只會提供思路和一些關…

Vue 全局事件總線:Vue 2 vs Vue 3 實現

&#x1f31f; 前言 歡迎來到我的技術小宇宙&#xff01;&#x1f30c; 這里不僅是我記錄技術點滴的后花園&#xff0c;也是我分享學習心得和項目經驗的樂園。&#x1f4da; 無論你是技術小白還是資深大牛&#xff0c;這里總有一些內容能觸動你的好奇心。&#x1f50d; &#x…

基于Spring Boot的電影網站系統

一、技術架構 后端框架&#xff1a;Spring Boot&#xff0c;它提供了自動配置、簡化依賴管理、內嵌式容器等特性&#xff0c;使得開發者可以快速搭建起一個功能完備的Web應用。 前端技術&#xff1a;可能采用Vue.js、JS、jQuery、Ajax等技術&#xff0c;結合Element UI等組件庫…

DeepSpeed訓練得到checkpoint如何像Huggingface模型一樣評測evaluation?zero_to_fp32.py有什么用?怎么用?

DeepSpeed訓練得到checkpoint如何像Huggingface模型一樣評測evaluation&#xff1f; 具體步驟 首先看一個樣例&#xff1a; 這是我用open-instruct框架&#xff0c;使用DeepSpeed訓練1728個steps得到的一個checkpoint。請注意&#xff0c;下文我演示用的例子是基于step_1152&…

node.js之---子線程(child_process)模塊

為什么需要子線程&#xff08;child_process&#xff09;模塊 Worker Threads 的基本概念 如何使用 Worker Threads Worker Threads 的性能 Worker 線程的優勢和限制 進階用法&#xff1a;共享內存 為什么需要子線程&#xff08;child_process&#xff09;模塊 在 Node.js…

【深度學習基礎之多尺度特征提取】多尺度圖像增強(Multi-Scale Image Augmentation)是如何在深度學習網絡中提取多尺度特征的?附代碼

【深度學習基礎之多尺度特征提取】多尺度圖像增強&#xff08;Multi-Scale Image Augmentation&#xff09;是如何在深度學習網絡中提取多尺度特征的&#xff1f;附代碼 【深度學習基礎之多尺度特征提取】多尺度圖像增強&#xff08;Multi-Scale Image Augmentation&#xff0…

鴻蒙應用開發 - 如何去掉字符串中空格

鴻蒙應用開發 - 如何去掉字符串中空格 在鴻蒙應用開發中&#xff0c;如果你使用的是ArkTS&#xff08;Ark TypeScript&#xff09;&#xff0c;可以通過JavaScript或TypeScript內置的字符串方法來去除字符串中的空格。以下是一些常用的方法&#xff1a; trim()&#xff1a;去…

最新版Chrome瀏覽器加載ActiveX控件之CFCA安全輸入控件

背景 CFCA安全輸入控件用于保證用戶在瀏覽器、桌面客戶端、移動客戶端中輸入信息的安全性&#xff0c;防止運行在用戶系統上的病毒、木馬等惡意程序入侵竊取用戶輸入的敏感信息。確保用戶輸入、本地緩存、網絡傳輸整個流程中&#xff0c;輸入的敏感信息不被竊取。廣泛應用于銀行…

vSAN手動平衡磁盤

原創作者&#xff1a;運維工程師 謝晉 vSAN手動平衡磁盤 vSAN手動平衡磁盤 vSAN手動平衡磁盤 1、ssh登錄到VCSA&#xff0c;然后登錄到 Ruby vSphere 控制臺 (RVC) # rvc administratorvsphere.local10.10.0.202、切換到計算機命名空間 0 / 1 10.10.0.20/ > cd 1 /10.…

接口測試面試題

接口測試在軟件測試中占據重要位置&#xff0c;無論是功能測試還是性能測試&#xff0c;接口的穩定性至關重要。以下總結了一些常見的接口測試面試題&#xff0c;幫助你從容應對面試挑戰&#xff01; 面試官常說&#xff1a;“接口測試是測試的重頭戲&#xff0c;了解接口的設計…

【前端,TypeScript】TypeScript速成(六):函數

函數 函數的定義 定義一個最簡單的加法函數&#xff1a; function add(a: number, b: number): number {return a b }&#xff08;可以看到 JavaScript/TypeScript 的語法與 Golang 也非常的相似&#xff09; 調用該函數&#xff1a; console.log(add(2, 3)) // out [LOG…

css的選擇器有哪些?優先級?

元素選擇器&#xff1a;選擇所有指定標簽類型的元素。 類選擇器&#xff1a;選擇具有指定類的所有元素&#xff0c;類名前有一個點 ID 選擇器&#xff1a;選擇具有指定 id 屬性的元素&#xff0c;ID 前有一個井號屬性選擇器&#xff1a;選擇具有指定屬性或屬性值的元素后代選…

Vue-Router之嵌套路由

在路由配置中&#xff0c;配置children import Vue from vue import VueRouter from vue-routerVue.use(VueRouter)const router new VueRouter({mode: history,base: import.meta.env.BASE_URL,routes: [{path: /,redirect: /home},{path: /home,name: home,component: () &…

Easy-Trans反向翻譯+Excel導入最佳實踐

1、概述 實現用戶excel上傳、解析、對于用戶輸入的中文翻譯為字典碼或者id&#xff0c;實現用戶輸入的參數校驗&#xff0c;最后入庫。如果用戶輸入的參數有問題&#xff0c;返回校驗結果給前端。 excel解析使用My-Excel組件&#xff0c;校驗使用hibernate-validator&#xff…

高效管理 Nginx 的利器:nginxWebUI 指南和 Docker 部署安裝過程

前言 Nginx WebUI 是一個為 Nginx 提供圖形化管理界面的工具。通過 WebUI&#xff0c;用戶可以輕松管理 Nginx 配置&#xff0c;而無需直接編輯配置文件&#xff0c;尤其適合新手用戶和頻繁修改配置的場景。 官網文檔&#xff1a;nginxWebUI - 文檔 本文將分享為什么選擇 ngin…

SpringCloud源碼-openFeign

LoadBalancer默認只有nacos服務發現器 openFeign與springcloud loadbalancer的結合點 openFeign通過spring cloud loadbalancer進行負載均衡&#xff0c;spring cloud loadbalancer通過discovery client獲取nacos的機器列表&#xff0c;然后底層進行負載均衡。