關於陣列做函式引數的問題集合彙總

2022-10-04 04:36:10 字數 1860 閱讀 7919

首先是陣列元素作為函式的實參,這和直接用多個變數作為函式的實參在用法上沒有什麼差別。

作為例子的**:

複製** **如下:

#include

using namespace std;

int main()

int max(int a,int b )

輸出結果是:2

然後,是用陣列名作為函式引數,陣列名其實代表的是陣列首個元素的指標。

複製** **如下:

#include

using namespace std;

int main()

void alter(int b)

輸出結果是:

如果我們這樣寫:

複製** **如下:

#include

using namespace std;

int main()

void alter(int b[20])

輸出結果:

為什麼我們已經定義了a[2]並且還賦值了,傳遞到函式以後,大小就只有乙個單位呢?

其實,我們定義b[ ]或者b[2]或則b[1]、b[20]、b[100],作用都相當於是 *b。編譯器直接忽略了,括號裡面的數值。

為了能夠更高的說明,陣列名作為實參實際上是傳遞的陣列的首指標,可以再看一下這個例子:

複製** **如下:

#include

using namespace std;

int main()

void alter(int *b)

這個和上面的那個輸出結果完全一樣!

******************************==分割線*************************=

接下來ciele,總結一下,陣列的引用相關問題

首先是乙個普通變數作為陣列中乙個值的引用的例子:

複製** **如下:

#include

using namespace std;

int main()

輸出結果是:5

普通變數作為陣列中乙個值的引用時,在使用上和int &a=b;並沒有什麼區別。

我們很自然的想到,普通的變數可以作為陣列元素的引用,那麼陣列元素可否作為其他元素的引用呢?

看下面的**:

複製** **如下:

#include

using namespace std;

int main()

編譯器報錯了,提示我們這樣做是不被允許的。

但是捏,乙個陣列整體可以作為另乙個陣列的引用:

複製** **如下:

#include

using namespace std;

int main()

複製** **如下:

#include

using namespace std;

int main()

因為數值中的元素是不可以其他變數的引用的額,所以需要用(&b)來說明,這是陣列整體引用,然後還必須寫清楚陣列的大小,即:

複製** **如下:

(int (&b)[2])

這個使用方法,也就引出了,陣列作為函式的形參的使用方法。

我們再看陣列作為函式的形參的時候應該是怎樣的。

複製** **如下:

#include

using namespace std;

int main()

void sm(int (&b)[2])

輸出結果是

4複製** **如下:

#include

using namespace std;

int main()

本文標題: 關於陣列做函式引數的問題集合彙總

本文位址:

陣列做函式引數的退化問題

include includevoid arraysort int a,int num void arraysort int a,int num void print array int a,int num int main int i 0 int num sizeof a sizeof a 0 n...

陣列做函式引數

陣列名是陣列元素首位址,可以直接當做實參,可以用指標或方式來當形參接收,都是位址傳遞,形參都是指標方式 include void input int arr void output int arr 這裡得出的大小是4個位元組,證明形參是指標形式 printf n d sizeof arr void ...

多維陣列做函式引數的退化

退化過程 void printarray01 int a 3 5 4k void printarray02 int a 5 5k void printarray03 int myarray 5 這就是陣列指標 6k 多維陣列做函式引數為什麼會存在退化?為什麼編譯器要設計成這個樣子 如何證明二維陣列在...