二維陣列名做引數傳遞問題

2021-06-21 01:20:28 字數 926 閱讀 4766

在用二維陣列名作為引數傳遞時容易出現segmention error。這是因為不能正確為二維陣列中元素定址的問題,正確的方法如下:

1. 用指向一維陣列的指標變數,如下例子所示:

[cpp]view plain

copy

print?

#include 

#include 

#define n   4

void testarr(int (*a)[n], int m)  

}  int main()  

, };  

testarr(a, 2);  

}  

int (*a)[n] 表示指向一維陣列的指標變數,即a所指向的物件是含有4個整型元素的陣列。注意 () 不能少,若定義成:

int *a[n] 則表示有乙個一維陣列a[n],該陣列中的所有元素都是 (int *)型別的元素。

在這裡,在子函式中訪問二維陣列中的元素可以用 a[i][j] 或者 *(*(a+i)+j)

2. 將二維陣列的兩個維度用變數的形式傳遞過去

如下所示:

[cpp]view plain

copy

print?

#include 

#include 

#define n   4

void testarray(int **a, int m, int n)  

}  int main()  

, };  

testarray((int **)a, 2, n);  

}  

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

二維陣列名做引數傳遞問題

在用二維陣列名作為引數傳遞時容易出現segmention error。這是因為不能正確為二維陣列中元素定址的問題,正確的方法如下 1.用指向一維陣列的指標變數,如下例子所示 cpp view plain copy print?include include define n 4 void testa...

二維陣列名如何作為引數傳遞

在用二維陣列名作為引數傳遞時容易出現segmention error。這是因為不能正確為二維陣列中元素定址的問題,正確的方法如下 cpp view plain copy include include define n 4 void testarray int a,intm,intn intmain...

二維陣列名充當函式引數

正文 首先,我引用了譚浩強先生編著的 c程式設計 上面的一節原文,它簡要介紹了如何 將二維陣列作為引數傳遞,原文如下 略有改變,請原諒 原文開始 可以用二維陣列名作為實參或者形參,在被呼叫函式中對形引數組定義時可以可以指 定所有維數的大小,也可以省略第一維的大 明,如 void func int a...