您好,登錄后才能下訂單哦!
這篇文章給大家介紹二維數(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ù)傳遞問題有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。