C復習(主要復習)

指針和數組

  • 指針數組是一個數組,數組的每個元素都是指針。它適用于需要存儲多個指針的場景,如字符串數組。
  • 數組指針是一個指針,指向一個數組。它適用于需要傳遞整個數組給函數或處理多維數組的場景。

?

函數指針:函數指針的定義需要指定函數的返回類型、參數列表以及指針的名稱。

//return_type (*pointer_name)(argument_type1, argument_type2, ...);

  • return_type:函數返回值的類型。
  • pointer_name:函數指針的名稱。
  • argument_type1, argument_type2, ...:函數參數的類型列表

?

?

?sizeof和指針與數組

Strlen和字符數組:

  • strlen函數:用于計算字符串的長度,不包括終止符\0。
  • 字符數組:用于存儲字符串,必須以\0結尾。

?

庫函數模擬實現手撕Memcopy:

void* my_memcpy(void* dest, const void* src, size_t n) {if (dest == nullptr || src == nullptr) {return nullptr;}char* d = static_cast<char*>(dest);const char* s = static_cast<const char*>(src);// 內存重疊檢查if (d > s && d < s + n) {// 從后向前拷貝for (size_t i = n; i != 0; --i) {d[i - 1] = s[i - 1];}}else {// 正常從前向后拷貝for (size_t i = 0; i < n; ++i) {d[i] = s[i];}}return dest;
}

?實現Mommove:

void* my_memmove(void* destination, const void* source, size_t num) {// 如果源和目標指針相同,則無需移動if (destination == source) {return destination;}// 將void指針轉換為char指針,以便逐字節操作char* dest = static_cast<char*>(destination);const char* src = static_cast<const char*>(source);// 如果源區域在目標區域之前或重疊,則從后向前復制if (src < dest && src + num > dest) {// 從后向前復制for (size_t i = num; i != 0; --i) {dest[i - 1] = src[i - 1];}}else {// 從前向后復制for (size_t i = 0; i < num; ++i) {dest[i] = src[i];}}return destination;
}

實現strstr?

char* my_strstr(const char* haystack, const char* needle) {// 如果needle是空字符串,根據標準定義,返回haystackif (*needle == '\0') {return const_cast<char*>(haystack);}// 獲取主串和子串的長度size_t haystack_len = strlen(haystack);size_t needle_len = strlen(needle);// 如果子串長度大于主串長度,肯定找不到if (needle_len > haystack_len) {return nullptr;}// 遍歷主串,尋找子串的起始位置for (size_t i = 0; i <= haystack_len - needle_len; ++i) {// 比較子串和主串的對應部分size_t j = 0;while (j < needle_len && haystack[i + j] == needle[j]) {++j;}// 如果整個子串都匹配,返回匹配的起始位置if (j == needle_len) {return const_cast<char*>(haystack + i);}}// 如果沒有找到子串,返回nullptrreturn nullptr;
}

自定義類型:內存對齊:

?

大小端的判斷:


bool isLittleEndian() {union {uint32_t i;unsigned char c[4];} u;u.i = 0x01020304;// 檢查最低地址的字節是否為最低有效字節return (u.c[0] == 0x04);
}int main() {if (isLittleEndian()) {cout << "系統是小端字節序。" << endl;}else {cout << "系統是大端字節序。" << endl;}return 0;
}

解釋

  • u.i被賦值為0x01020304
  • 如果系統是小端,u.c[0]將是0x04;如果是大端,u.c[0]將是0x01
  • 根據u.c[0]的值判斷字節序。?

這次是對C中我還不清楚并且比較重要的知識進行總結,順序可能會有點亂,還請見諒

?

?

?

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

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

相關文章

探索大語言模型(LLM):定義、發展、構建與應用

文章目錄 引言大規模語言模型的基本概念大規模語言模型的發展歷程1. 基礎模型階段&#xff08;2018年至2021年&#xff09;2. 能力探索階段&#xff08;2019年至2022年&#xff09;3. 突破發展階段&#xff08;以2022年11月ChatGPT的發布為起點&#xff09; 大規模語言模型的構…

5. k8s 之 pod原理與使用

Kubernetes Pod 原理詳解 1. Pod 的部署方式 Pod 是 Kubernetes 的最小調度單元&#xff0c;其部署方式分為 聲明式&#xff08;YAML&#xff09; 和 命令式&#xff08;kubectl&#xff09; 兩種&#xff1a; (1) 聲明式部署&#xff08;推薦&#xff09; 通過 YAML 文件定…

使用PyTorch實現目標檢測邊界框轉換與可視化

一、引言 在目標檢測任務中&#xff0c;邊界框&#xff08;Bounding Box&#xff09;的坐標表示與轉換是核心基礎操作。本文將演示如何&#xff1a; 實現邊界框的兩種表示形式&#xff08;角點坐標 vs 中心坐標&#xff09;之間的轉換 使用Matplotlib在圖像上可視化邊界框 驗…

電影推薦及數據分析可視化系統(Python+Echarts+Mysql+Flask框架)

提升自己&#xff0c;掌握數據分析的能力&#xff0c;最快的方式就是實踐&#xff01; 下面是對本項目的一些功能展示、介紹以及部分核心代碼的展示,附項目系統展示的視頻,制作不易如需完整代碼后臺私信我有償獲取! 一 、系統分析及功能介紹 1.系統分析 系統采用Python作為開發…

Android Jetpack Compose 高級開發核心技術

Android Compose 高級技術總結 1. 性能優化 1.1 狀態管理優化 狀態提升原則&#xff1a;將狀態提升到共享的最近共同父組件derivedStateOf&#xff1a;當需要基于多個狀態計算派生狀態時使用 val scrollState rememberScrollState() val showButton by remember {derivedS…

Java堆結構深度解析:原理、實現與應用全指南

一、堆的核心概念體系 1. 堆的定義與性質 graph TBROOT((最大堆)) --> A[父節點 ≥ 子節點]ROOT --> B[完全二叉樹結構]ROOT --> C[數組存儲]ROOT --> D[快速獲取極值] 2. 堆類型對比 類型特性典型應用場景最大堆父節點值 ≥ 子節點值獲取前K大元素最小堆父節點…

SpringMVC學習(請求與響應。常見參數類型接收與響應。@RequestParam、@RequestBody的使用)(詳細示例)

目錄 一、請求與響應。(RequestMapping) &#xff08;1&#xff09;使用注解RequestMapping對業務模塊區分。 StudentController。 TeacherController。 &#xff08;2&#xff09;Apifox請求與響應。 "/student/login"。 "/teacher/login"。 二、常見參數…

回溯算法+對稱剪枝——從八皇后問題到數獨問題(二)

引入&#xff1a; 本節我們進一步完善八皇后問題&#xff0c;學習剪枝、八皇后殘局問題 進一步領會邏輯編程的概念&#xff0c;深入體會回溯算法&#xff0c;回顧上一節提到的啟發搜索策略。 回顧&#xff1a; 八皇后問題&#xff1a;我們需要在一個空棋盤上放置 n 個皇后&a…

【玩泰山派】MISC(雜項)- 使用vscode遠程連接泰山派進行開發

文章目錄 前言流程1、安裝、啟動sshd2、配置一下允許root登錄3、vscode中配置1、安裝remote插件2、登錄 **注意** 前言 有時候要在開發板中寫一寫代碼&#xff0c;直接在終端中使用vim這種工具有時候也不是很方便。這里準備使用vscode去通過ssh遠程連接泰山派去操作&#xff0…

【VsCode】設置文件自動保存

目錄 一、前言 二、操作步驟 一、前言 VSCode中開啟自動保存功能可以通過訪問設置、修改settings.json文件、使用自動保存延遲功能來實現。這些方法能有效提升編程效率、避免數據丟失、實時同步更改。 二、操作步驟 在 Visual Studio Code (VS Code) 中設置自動保存功能非…

Adobe After Effects的插件--------Optical Flares之Options概述

Optical Flares插件的Options是對整個效果的組裝和設置。點擊該按鈕會彈出一個組裝室彈窗。 Options組裝室就是對每個【鏡頭對象】進行加工處理,再將其組裝在一起,拼湊成完整的光效。 接下來是我對組裝室的探索: 面板 面板中有預覽、堆棧、編輯和瀏覽按鈕,其作用是調節窗…

如何用 esProc 補充數據庫 SQL 的缺失能力

某些數據庫 SQL 缺失必要的能力&#xff0c;通常要編寫大段的代碼&#xff0c;才能間接實現類似的功能&#xff0c;有些情況甚至要改用存儲過程&#xff0c;連結構都變了。常見的比如&#xff1a;生成時間序列、保持分組子集、動態行列轉換、自然序號、相對位置、按序列和集合生…

迷你世界腳本腳本常見問題

腳本常見問題 彼得兔 更新時間: 2024-05-22 17:54:44 在查閱開發者學院中的腳本API時&#xff0c;若有任何問題或建議&#xff0c;歡迎通過問卷進行反饋&#xff01;【點我填寫問卷】 1.Block中的data在什么地方使用 data使用有具體需求,此處不建議開發者使用。開發者盡可能使…

四、Appium Inspector

一、介紹 Appium Inspector 是一個用于移動應用自動化測試的圖形化工具&#xff0c;主要用于檢查和交互應用的 UI 元素&#xff0c;幫助生成和調試自動化測試腳本。類似于瀏覽器的F12(開發者工具),Appium Inspector 的主要作用包括&#xff1a;? 1.?檢查 UI 元素? …

android11通過白名單卸載安裝應用

目錄 1.源碼路徑: 2.準備文件package.conf: 3.安裝方法installPackagesLI 4.卸載方法deletePackageX 1.源碼路徑: frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java public static final String WHITELIST_PATH="/data/misc/pa…

qt mapFrom返回的QPoint和event->pos()區別和globalPos區別

mousePressEvent 和 eventFilter 里 event.pos 不一樣&#xff0c;一定要注意 eventFilter里event.pos 直接返回相對于label左上角的坐標&#xff0c;就不要再mapFrom mousePressEvent 里event.pos 返回是相對于窗口左上角的坐標&#xff0c;需要用mapFrom返回label左上角的…

Hadoop四 Hive語法

一 數據庫操作 Hive數據庫操作&#xff0c;與MySql有很多都是一致的 創建數據庫 create database if not exists myhive; use myhive;查看數據庫詳細信息 desc database myhive;數據庫本質上就是在HDFS之上的文件夾&#xff0c;是一個以.db結尾的目錄&#xff0c;默認存…

前端VUE框架理論與應用(10)

1、記住全局注冊的行為必須在根 Vue 實例 (通過 new Vue) 創建之前發生。 2、要注意,以 / 開頭的嵌套路徑會被當作根路徑。 這讓你充分的使用嵌套組件而無須設置嵌套的路徑。 3、注意:在 Vue 實例內部,你可以通過 $router 訪問路由實例。因此你可以調用 this.$router.push…

leetcode-單調棧26

關于單調棧的順序總結&#xff1a; 尋找右邊第一個比我大的&#xff1a;從左到右遍歷&#xff0c;棧單調遞減 尋找左邊第一個比我小的&#xff1a;從左到右遍歷&#xff0c;棧單調遞增 尋找右邊第一個比我小的&#xff1a;從右到左遍歷&#xff0c;棧單調遞增 尋找左邊第一個比…

Linux:安裝 CentOS 7(完整教程)

文章目錄 一、簡介二、安裝 CentOS 72.1 虛擬機配置2.2 安裝CentOS 7 三、連接遠程服務器&#xff08;擴展&#xff09;3.1 獲取虛擬機 IP 地址3.2 連接遠程服務器 四、結語 一、簡介 CentOS&#xff08;Community ENTerprise Operating System&#xff09;是一個基于 Linux 的…