博客 / 列表

祝你今天愉快 - C/C++進階學習(十六)聯合體和枚舉

1. 聯合體 (Union) 聯合體(union)是 C/C++ 中一種特殊的數據結構,它允許在同一內存位置存儲不同類型的數據。聯合體的所有成員共享相同的內存空間,但同一時刻只能存儲一個成員的值。 特點: 聯合體內的每個成員都有相同的內存起始地址。 聯合體的大小是其最大成員的大小(即,最大佔用內存的成員)。 只有一個成

指尖人生 , 移動開發 , include , Android , define , 枚舉類型

祝你今天愉快 - C/C++進階學習(十五)字節對齊和結構體大小計算

一、什麼是字節對齊 編譯器為了讓 CPU 訪問更快,會把變量放在“合適的地址”上,而不是緊挨着放。 為什麼要對齊? CPU 訪問 4 字節對齊的 int 比非對齊快 某些平台(如 ARM)不對齊直接崩 所以編譯器會自動插空字節(padding) 二、對齊的核心規則 規則 1:成員對齊規則

指尖人生 , 移動開發 , include , Android , 編譯器 , JAVA

祝你今天愉快 - C/C++進階學習(十三)結構體和結構體指針(一)

一、結構體的定義和使用 char* 不算基本數據類型 結構體(struct)是什麼 結構體:把不同類型的數據組合成一個整體。 struct Person { char name[20]; int age; float height; }; struct Person 是類型名

指尖人生 , 移動開發 , 初始化 , include , Android , JAVA

祝你今天愉快 - C/C++進階學習(十二)字符串替換

C 標準庫沒有 replace 函數。 所以所謂“字符串替換”,本質上都是: 掃描 + 計算長度 + 內存拷貝 C 字符串替換的 3 種常見方式 方式一:生成新字符串 原字符串 = 前段 + src + 後段 新字符串 = 前段 + dst + 後段 不修改原字符串 需要 mal

字符串替換 , 指尖人生 , 數組 , 字符串 , 移動開發 , Android

祝你今天愉快 - C/C++進階學習(十一)字符串截取和大小寫轉換

一、C 語言裏的字符串截取(重點:沒有內置函數) C 標準庫沒有直接的“substring”函數,截取只能靠 指針 + 拷貝 或 手動改 '\0'。 1️⃣ 指針偏移(不拷貝,最快) char str[] = "HelloWorld"; char* sub = str + 5; printf("%s\n", sub); // World

指尖人生 , 字符串 , 移動開發 , 未定義 , 字符轉換 , Android

祝你今天愉快 - C/C++進階學習(十)字符串比較、查找、包含、拼接

一、strcmp —— 字符串比較(區分大小寫) int strcmp(const char *s1, const char *s2); 按 字典序 比較兩個字符串(ASCII) 返回值

指尖人生 , 大小寫 , 移動開發 , 子字符串 , bc , Android

祝你今天愉快 - C/C++進階學習(九)字符串長度及類型轉換

只記錄C的字符串使用方式 C 風格字符串(最底層) const char* s = "hello"; char buf[] = "hello"; 本質:以 `'\0' 結尾的 char 數組 示例: #include stdio.h // 字符串定義 int main() { //printf("He

指尖人生 , 字符串 , 移動開發 , Android , 進制 , 浮點數

祝你今天愉快 - C++進階學習(七) 動態開闢內存的應用場景

需要動態開闢內存的場景有以下幾種: 1. 大數據量的內存開闢 2. 變量的生命週期需要超過函數調用週期 3. 不確定需要多大內存空間,需要運行時開闢內存 示例: int main() { // 假設我們現在需要接收用户所輸入的數,然後進行排序 int num; printf("請輸入數的個數:"); // 獲取用户輸入 scan

指尖人生 , 函數調用 , 移動開發 , 數據 , i++ , c++ , Android

祝你今天愉快 - C++進階學習(六) 靜態內存開闢和動態內存開闢

在 C++ 中,內存管理是核心課題之一。根據內存開闢的時間和方式,主要可以分為靜態內存開闢(通常涉及棧空間和全局/靜態區)和動態內存開闢(堆空間)。 1. 靜態內存開闢 靜態內存開闢是指在編譯階段就確定了大小,並在程序運行到對應作用域時由系統自動分配和釋放的內存。 存儲位置:主要在棧 (Stack) 或 全局/靜態存儲區。

指尖人生 , 數組 , 移動開發 , c++ , Android , 動態內存 , 示例代碼

祝你今天愉快 - C++進階學習(五) 函數指針

在 C++ 中,函數指針(Function Pointer) 是一個特殊的指針變量,它存儲的是函數在內存中的起始地址,而不是數據變量的地址。 1. 基本語法 聲明函數指針的關鍵在於:指針的特徵標(返回類型和參數列表)必須與它指向的函數完全匹配。 語法模板: 返回類型 (*指針變量名)(參數列表); 示例代碼: int add(int a,

指尖人生 , 函數指針 , 移動開發 , 指針變量 , 回調函數 , Android

祝你今天愉快 - C++進階學習(四) 指針循環遍歷和賦值

在 C++ 中,指針可以像數組一樣進行循環遍歷和賦值,這是利用了“數組名退化為指針”以及“指針算術(pointer arithmetic)”的特性。 一、基本原理 數組在大多數表達式中會自動退化為指向首元素的指針。 指針支持+、-、++、--等運算,稱為指針算術。 p + i表示從指針p起偏移i個元素(不是字節!),等價於arr[i]。

指尖人生 , 數組 , 移動開發 , c++ , Android

祝你今天愉快 - C++進階學習(三)二級指針和多級指針

在 C++ 中,二級指針(也稱指針的指針)和多級指針是用於間接訪問內存的高級指針形式。它們的核心思想是:指針本身也是一個變量,也有地址,可以用另一個指針來指向它。 一、一級指針 int a = 10; int* p = a; // p 是一級指針,存儲 a 的地址 p指向a *p得到a的值(

指尖人生 , 二級指針 , 數組指針 , 數組 , 移動開發 , c++ , Android

祝你今天愉快 - C++進階學習(一) 變量地址和指針變量

在 C++ 中,變量地址和指針變量是內存操作的核心概念。 1.變量地址 每個變量在內存中都有一個存儲位置,這個位置用地址表示。 使用取地址運算符可獲取變量的地址。 int x = 42; cout x; // 輸出 x 在內存中的地址(如 0x7ffd1234) 地址是一個

指尖人生 , 數組 , 移動開發 , 字節數 , 指針變量 , c++ , Android

祝你今天愉快 - C++學習(二十七)if/if else 語句和邏輯運算符

C++ 中的 if 和 if-else 語句用於根據條件控制程序的執行流程,配合邏輯運算符可以構建複雜的判斷邏輯。 一、if/if-else語句 1. 基本if語句 if (條件表達式) { // 條件為真(true)時執行的代碼 } 如果條件表達式的值為 非零(即邏輯上為 true),則執行大括

指尖人生 , 移動開發 , include , c++ , Android , ios

祝你今天愉快 - C++學習(二十六) 編程練習2

6.完成編程練習5,但這一次使用一個二維數組來存儲輸入一3年中每個月的銷售量。程序將報告每年銷售量以及三年的總銷售量 #includeiostream using namespace std; int main() { // 月份,二維數組存儲三年的銷售量 const string months[12] = {"1月","2月"

指尖人生 , 移動開發 , include , c++ , Android , ci

祝你今天愉快 - C++學習(二十五) 編程練習1

1.編寫一個要求用户輸入兩個整數的程序。該程序將計算並輸出這兩個整數之間(包括這兩個整數)所有整數的和。這裏假設先輸入較小的整數。例如,如果用户輸入的是2和9,則程序將指出2~9之間所有整數的和為44。 #includeiostream using namespace std; int main() { // 1. 接收用户的輸入,最小值

指尖人生 , 數組 , 移動開發 , include , c++ , Android

祝你今天愉快 - C++學習(二十四)循環嵌套和二維數組

一、二維數組 二維數組可以看作是“數組的數組”,常用於表示表格、矩陣等具有行和列結構的數據。 聲明方式: int arr[3][4]; // 3 行 4 列的整型二維數組 初始化: int matrix[2][3] = { {1, 2, 3}, // 第0行 {4, 5, 6} // 第1行 }

指尖人生 , 數組 , 移動開發 , c++ , Android , 二維數組 , ios

祝你今天愉快 - C++學習(二十三)關係表達式 和 while / do...while 循環

一、關係表達式 關係表達式用於比較兩個值的大小或相等性,結果是一個 布爾值(true 或 false)。 常見關係運算符: 運算符 含義 示例

指尖人生 , 移動開發 , include , i++ , c++ , Android , ios

祝你今天愉快 - C++學習(二十二) 組合賦值運算,++ 和 --

C++ 中的複合賦值運算符(也稱組合賦值運算符)是對“操作 + 賦值”這一常見模式的簡寫,使代碼更簡潔、可讀性更強。 運算符 含義 等價

指尖人生 , 移動開發 , include , 賦值 , 操作數 , c++ , Android

祝你今天愉快 - C++學習(二十一) for循環

一、介紹 C++ 中的 for 循環用於重複執行一段代碼,主要有三種形式: 傳統 for 循環(C 風格) for (初始化; 條件; 迭代) { // 循環體 } 初始化:循環開始前執行一次(如 int i = 0)。 條件:每次循環前檢查,為 true 則繼續,false 則退出。

指尖人生 , 移動開發 , include , c++ , Android , ci

祝你今天愉快 - C++學習(二十) 編程練習 6-9

6.WilliamWingate從事披薩分析服務。對於每個披薩餅,他都需要記錄下列信息: 披薩餅公司的名稱,可以有多個單詞組成。 披薩餅的直徑 披薩餅的重量 請設計一個能夠存儲這些信息的結構,並編寫一個使用這種結構變量的程序。程序將請求用户輸入上述信息,然後顯示這些信息。請使用cin(或它的方法)和cout #in

指尖人生 , 移動開發 , include , c++ , Android , ci

祝你今天愉快 - C++學習(十八) 編程練習 1-5

1.編寫一個c++程序,如下述輸出示例的那樣請求並顯示信息: What is your first name? Betty Sue What is your last name? Yewe What letter grade do you deserve? B What is your age? 22 Name:Yewe,Bett

指尖人生 , 移動開發 , include , c++ , Android , ci

祝你今天愉快 - C++學習(十七)複習題

1.如何聲明下述數據? a.actor是由30個char組成的數組 b.betsie是由10o個short組成的數組 c.chuck是由13個float組成的數組 d.dipsea是由64個long double組成的數組 #includeiostream using namespace

指尖人生 , 移動開發 , include , c++ , Android , ios

祝你今天愉快 - C++學習(十六)指針的基本操作

/* 動態數組: */ #includeiostream using namespace std; int main() { // new 是在堆內存裏面的,如果不 delete ,除非程序崩潰或者程序退出,否則內存一直佔用 // new - delete // new[] - delete[] // 放在棧中 int nu

指尖人生 , 移動開發 , include , 程序退出 , Android , ios