溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

二維數(shù)組名做參數(shù)傳遞問題有哪些

發(fā)布時間:2021-10-14 15:31:07 來源:億速云 閱讀:100 作者:柒染 欄目:編程語言

這篇文章給大家介紹二維數(shù)組名做參數(shù)傳遞問題有哪些,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

在用二維數(shù)組名作為參數(shù)傳遞時容易出現(xiàn)Segmention Error。這是因為不能正確為二維數(shù)組中元素尋址的問題,正確的方法如下:

1. 用指向一維數(shù)組的指針變量,如下例子所示:

#include <stdlib.h>
#include <stdio.h>

#define N   4

void testArr(int (*a)[N], int m)
{
    for(int i = 0; i < m; ++i)
        for(int j = 0; j < N; ++j)
        {
            printf("a[%d][%d] = %d\n", i, j, a[i][j]);
        }
}

int main()
{
    int a[2][N] = {{1, 2, 3, 4}, {5, 6, 7, 8}};
    testArr(a, 2);
}

int (*a)[N] 表示指向一維數(shù)組的指針變量,即a所指向的對象是含有4個整型元素的數(shù)組。注意 () 不能少,若定義成:

int *a[N] 則表示有一個一維數(shù)組a[N],該數(shù)組中的所有元素都是 (int *)類型的元素。

在這里,在子函數(shù)中訪問二維數(shù)組中的元素可以用 a[i][j] 或者 *(*(a+i)+j)

2. 將二維數(shù)組的兩個維度用變量的形式傳遞過去

如下所示:

#include <stdlib.h>
#include <stdio.h>

#define N   4
void testArray(int **a, int m, int n)
{
    for(int i = 0; i < m; ++i)
        for(int j = 0; j < n; ++j)
        {
            printf("a[%d][%d] = %d\n", i, j, *((int*)a + i * n +j));
        }
}

int main()
{
    int a[2][N] = {{1, 2, 3, 4}, {5, 6, 7, 8}};

    testArray((int **)a, 2, N);
}

此時在子函數(shù)中不能使用a[i][j]的形式訪問數(shù)組元素,因為數(shù)組元素都是順序存儲,地址連續(xù),在使用a[i][j]訪問數(shù)組元素時,無法順序訪問到指定的元素,所有我們只能通過計算指定所要訪問的元素。

關于二維數(shù)組名做參數(shù)傳遞問題有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI