---
# System prepended metadata

title: learnC Hub

---

# 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(); //顯示飢餓值
            }
        }
    }
}
                            
                            
```
                        