# learnC Hub ## 更改名稱 點選前一個紫色圈圈,點選interactive Rebase..... ![](https://i.imgur.com/qyPcLRw.png) 左上更改為Reward,接著就可以對右邊改名 ![](https://i.imgur.com/UDXSpRU.png) Add 添加了新功能、內容等 Modify 修改了某項內容 Fix 修復了某項功能 Remove 移除了某項功能 Optimize 優化了某項功能 Up 與前一筆變更報告一直,屬於遺漏了的補充 # 新建資料夾 ![](https://i.imgur.com/S8TfoWh.png) 1. Clone : 雲端上有的資料夾 2. Init : 建一個新的 3. Push : 將本地資料同步到雲端 4. Pull : 將雲端資料同步到本地端 5. Merge : 當pull遇到衝突(修改同行程式碼時,可用merge來合併檔案) gitgnore Template : 想忽略的指令文件 Licence :版權 ![](https://i.imgur.com/a9bZHZz.jpg) json :傳遞文字使用 條設定檔好用 ![](https://i.imgur.com/nvIY7jB.png) 左下 setting 右上 ![](https://i.imgur.com/lnzB2xF.png) 跑出json檔 ->我們的VScode的主題設定風格 //Git //brach 分支 // 版本 // 功能 // main 主分支 // release 發佈 // develop 開發版 // feature 功能 # Group LearnHub\learn-group ->大家都在這裡作業、同步 step. 先推到自己的雲端,大家就可以透過merge同步 ![](https://i.imgur.com/nF01ZMV.png) merge方法 ![](https://i.imgur.com/O7D7eTc.png) # 3/23 #a的16進位 printf("%p\n",a); #a在記憶體 printf("%p",&a); 8 bit字元 = 1 byte字節 int = 4 byte = 32 bit int 所能表達的((2^32)/2)-1 short = 2 byte long長整型 2^128 = long long (雙長整型) 門牌 64位元的資料 房間 64位元的大小 long > int ,所以從 int &a,a=地址 printf("%p\n",&*p) 0000000000000000(空指標)(NULL) 指標用來指向記憶體位置 p的記憶體位置 int a=3 int* p= &a int* p2= p a的值 printf("%d\n",a) 3 a的記憶體位置 printf("%p\n",&a) 000000F4D89FFCBC p的值 printf("%p\n",p) 000000F4D89FFCBC p的記憶體位置 printf("%p\n",&p) 000000F4D89FFCB0 p2的值 printf("%p\n",p2) 000000F4D89FFCBC p2的記憶體位置 printf("%p\n",&p2) 000000F4D89FFCA8 用p2的指標求的值 printf("%d\n",*p) 3 ### 問題2 int a=3 int* ptr = &a int* ptr2 = &a *ptr =2 (更改ptr的值) printf("%d\n", *ptr) printf("%d\n", *ptr2) 2 2 ### 問題3 int main(){ int i ; int ARR[5]={1,2,3,4,5} ; for(i=0 ; i<5 ; i=i+1){ printf("%d\n",*(ARR+i)) ; } return 0; } 1 2 3 4 5 ### 問題4 #include <stdio.h> #define SIZE 10 void Func(int *p, int size) { int i ; for(i=0 ; i<size ; i++){ *(p+i)=i ; } } int main(){ int ARR[SIZE] ; int i ; Func(ARR,SIZE ); for(i=0 ; i<SIZE ; i++){ printf("%d\n",ARR[i]) ; } return 0; } 0 1 3 4 5 6 7 8 9 const int ABC =5 (常量/不可變動) int ABC =5 (可變動) # 3/24 ### int版本一: #include <stdio.h> #define SIZE 10 const int ABC =5 ; //下面程式都能用 void Func(int *p, int size) { for(int i=0 ; i<size ; i++){ *(p+i)=i ; } } int main(){ int ARR[SIZE] ; int i ; Func(ARR,SIZE ); for(i=0 ; i<SIZE ; i++){ printf("%d\n",ARR[i]) ; printf("%p\n",&ARR[i]) ; } return 0; } ### int版本二: #include <stdio.h> int main(){ int ARR[] = {0,1,2,3,4,5,6,7,8,9}; for (int i = 0; i < 10; i++) { printf("%d\n", ARR[i]); printf("%p\n", &ARR[i]); } } 0 0000004062DFFC20 1 0000004062DFFC24 2 0000004062DFFC28 3 0000004062DFFC2C 4 0000004062DFFC30 5 0000004062DFFC34 6 0000004062DFFC38 7 0000004062DFFC3C 8 0000004062DFFC40 9 0000004062DFFC44 ### long long版: long long ARR[] = {0,1,2,3,4,5,6,7,8,9}; for (int i = 0; i < 10; i++) { printf("%ld\n", ARR[i]); printf("%p\n", &ARR[i]); } 0 0000006D431FFC70 1 0000006D431FFC78 2 0000006D431FFC80 3 0000006D431FFC88 4 0000006D431FFC90 5 0000006D431FFC98 6 0000006D431FFCA0 7 0000006D431FFCA8 8 0000006D431FFCB0 9 0000006D431FFCB8 #include<stdio.h> //c #include<iostream> //c++ ## C++ 封裝 : class 繼承 : 就是繼承 protected 多型 數量不能一樣 ![](https://i.imgur.com/oG1HnH0.png) 抽象 : 尚未見完整的class,只有完整寫完方法的才可以被new出來 (virtual) 接口 # 3/26 介紹build.bat檔 .bat(批量處理) :創建環境 .sh : Linux ECHO 後面一定要加空格 ECHO. 換行 MD : 創建檔案 RM : 移除檔案 % : 參數 %abc% : 引用變數 %~dp0 : 類似絕對路徑 d:drive(槽) / p : path (當前執行檔所在位置) CMD 終端機(提示命令字元) DIR "" : 字串(\0) '' : 字元 %s(string) : 輸出字串 %c(char) : 輸出字元 ## 討論game- monster- trainer 目的:養怪獸 基礎資料: class monster{ 1. 等級:每日登入到達一定等級才能夠學習、打工、進化 * 經驗值:每日登入、上學、打工,到達一定值會升等 1. 生命值:會餓死,會隨時間降低、設定下限、會隨等級而上升 1. 清潔度:會隨時間降低、設定下限、到達一定會降低心情 1. 心情度:心情太低,不能夠學習、設定下限、 } 能夠互動(聊天、飢餓、學習、洗澡、 餵食、遊戲、洗澡 進化: 改變怪獸型態 上課學習: 需到達?等才能夠開啟 打工賺錢: 需到達?等才能夠開啟 新建class ![](https://i.imgur.com/2mJd2eb.png) # 4/16 ###### 可對照下面的範例 m_開頭:分辨自己的東西,並讓繼承者知道 g_開頭:公開(現在不用它,過危險) private int{get......} get是只拿取變數 (ps如果要給使用者用 需要加set) 方法開頭一定要大寫 一定要有括號!! 大括號{}是實做,方法 小括號()是參數 參數的小括號緊接大括號 *架構:f(x){} 飢餓值=原本的值+食物的值 進來的值要條件句,確定是否>0後加入 class(藍圖) 創建生成 object(實體) 創建一定要 new一個出來 var指定型態=new型態(右邊才會賦值給左邊) 變數. 其中的"."是它會什麼 ? 代表變數可能是空的(Null) break:停止並跳出這個迴圈 ## C# 架構 1. 屬性 property 2. 成員變數 member var 3. 構建式 constructer (沒有回傳值) 4. 解構式 destructer(刪除之前做的,ex:釋放資源) 5. 方法:(只有它會,確定有沒有回傳值) * 初始化 init * 功能 func * 資訊 info ### 範例(藍圖) ```csharp namespace GameMonsterTrainer.Demo { public class Monster { //建一個名為Monster的類別(藍圖) //屬性 public int Hunger { get => m_hunger; }//拿取變數 //m_開頭:分辨自己的東西,並讓繼承者知道 //g_開頭:公開(現在不用它,過危險) //成員變數 private int m_hunger; //建構式 public Monster(/*參數*/int hunger) { m_hunger = hunger; } //方法 public void Eat(int food) { //飢餓值增加 if (food > 0) { m_hunger = m_hunger + food; } } public void Show() { //數值顯示 Console.WriteLine($"Hunger: {Hunger}"); } public bool cost() { //消耗 m_hunger = m_hunger - 150; if (m_hunger <= 0 ) { return true; } return false; } ``` ## 範例(program) ```csharp using System; using GameMonsterTrainer.Demo; namespace GameMonsterTrainer { public static class Program { public static void Main(string[] args) { Console.WriteLine("Game Monster Trainer"); //遊戲名 var bob = new Monster(1000); //var不確定會是哪種型態時使用 ;new 某種型態(右邊才會賦值給左邊) string idx = "99"; //先隨便假設以便進入迴圈 while (idx != "0") { //當idx不為0時進入迴圈 idx = Console.ReadLine(); //輸入一個數值 bool a = bob.cost(); //消耗使用 if (a == true) { //當消耗到0以下宣告死亡 Console.WriteLine("You are die!"); break; //break:停止並跳出這個迴圈 } switch (idx) { //設計數字需做出的對應方法 case "0": break; case "1": bob.Eat(400); break; case "2": bob.Show(); break ; case "3": break; } bob.Show(); //顯示飢餓值 } } } } ```