Write-Up 好記性不如爛筆記

Pointer & Array

Pointer & Array

嘗試了幾個範例,做點紀錄。

一維陣列傳遞

// 一維陣列傳遞
void display_array(int arr[], int size)
{
    for(int i = 0; i < size; i++)
    {
        printf("%d \n",arr[i]);
    }
}

void display_array(int *arr, int size)
{
    for(int i = 0; i < size; i++)
    {
        printf("%d \n", *(arr+i) );
    }
}

int main()
{
    int arr[5] = {1,2,3,4,5};
    display_array(arr,5);
    
}

二維陣列傳遞


void display_array(int (*arr)[5], int size)
{
    for(int i = 0; i < 2; i++)
    {
        for(int j = 0;j < size;j++)
        {
            printf("%d \n", arr[i][j]);
        }
        
    }
}

void display_matrix(int arr[][5], int size)
{
    for(int i = 0; i < 2; i++)
    {
        for(int j = 0;j < size;j++)
        {
            printf("%d \n", arr[i][j]);
        }
        
    }
}

int main()
{
    int matrix[2][5] = 
    {
        {1,2,3,4,5},
        {6,7,8,9,10}
    };
    display_matrix(matrix,5);
    
    // 另外一種寫法
    int (*p_matrix)[5] = matrix;
    /* 宣告一個指向陣列的pointer p_matrix。
     * p_matrix定義為一個指向二維陣列的pointer,每列有5個元素
     * 所以 p_matrix[0] 指到記憶體位置為 matrix[0][0]的位置
     * p_matrix[1] 指到記憶體位置為 matrix[1][0]的位置
    */
    
    display_matrix(p_matrix,5);
    
    /* 如果是宣告成 int *p_matrix[5];
     * 則代表 一個 p_matrix的陣列,長度為5,陣列裡面裝的是 指向 integer的pointer
     *
    */
}


void display_matrix(int **arr,int size)
{
    for(int i = 0; i < 2; i++)
    {
        for(int j = 0;j < size;j++)
        {
            printf("%d \n", arr[i][j]);
        }
        
    }
}

int main()
{
    int (*(matrix_t[])) = 
    {
       (int[]) {1,2,3,4,5},
       (int[]) {6,7,8,9,10}
    };
    
    
    display_matrix(matrix_t,5);
    
    // 另外一種寫法
    /* 宣告一個陣列 matrix_t,裝指向integer的 pointer
     * matrix_t[0] : 指向 陣列 {1,2,3,4,5}的pointer
     * matrix_t[1] : 指向 陣列 {6,7,8,9,10}的pointer     
     * 所以傳給funtion是 pointer 的 pointer
    */

}