Pin-Jiun / Programming-Language-CPP

It's the note/experience about C++, and I have the basic ability of C.
0 stars 0 forks source link

8.0-pointer #9

Open Pin-Jiun opened 1 year ago

Pin-Jiun commented 1 year ago

基本pointer詳見C語言

    int n = 5;
    int *ptr = &n;
    *ptr = 10;

void pointer

    void print(void *ptr, char type){
        switch(type){
        case 'i':cout << *((int*)ptr) << emdl; break;
        case 'c':cout << *((char*)ptr) << emdl; break;  
        }
    }

Pointer and Array(詳見C語言)

在傳遞array時,為了減少記憶體的不必要浪費,將會進行隱性轉,以 指標 的方式型進行傳遞

    int Numbers[5];

    for(int i =0; i<3; i++){
        cout << "Number: ";
        cin >> Numbers[i];
    }

    for(int i = 0; i<3; i++){
        cout << *(Numbers+i) << endl;
    }

Dynamic Array

假設建立一個myArray,且以變數的形式創立

    int size;
    cout << "Size: ";
    cin >> size;
    int myArray[size];

然而這種創建方式是非常危險的,有些complier是無法運行的 此時就需要 Dynamic Arrayint *myArray = new int[size] 但使用Dynamic Array時,使用者必須自行負責刪除使用的記憶體(c語言中是使用mallocfree),避免memory leak

int main()
{
    int size;
    cout << "Size: ";
    cin >> size;
    int *myArray = new int [size];

    delete[]myArray;
    myArray = NULL;

    return 0;
}

2D Array

創建一個3X4的 2D Array

image

int rows = 3;
int cols = 4;

//comstruct
int* *table = new int* [rows];
for(int i = 0; i < rows; i++){
    table[i] = new int[cols];
}

table[1][2]=88;

//free memory
for(int i = 0; i < rows; i++){    
   delete[] table[i]; 
}
delete[] table;
table = NULL;