C&C++關於數組的定義,引用傳參問題

C&C++關於數組的定義,引用傳參問題
(1)數組的定義
        #define maxSize 50
        static int length = 10;

        正確定義方法:int array[maxSize]; 
        錯誤定義方法:int array[length];

            分析:數組的 [ ]中只能放入常量,maxSize是宏定義的常量,而length是定義的靜態變量,所以用後一種方法定義就會抱錯;我們一般定義的時候使用maxSize申請足夠大的空間,但是賦值的時候使用length來賦值,也就是說不是所有申請的maxSize的空間都會在一開始被賦值。之所以這樣,是爲了方便以後的數組順序表元素的刪減和增加操作;比如刪除最後一個元素,只需要 ”length--;“就可以了。

(2)數組的傳參及引用問題 
        
        如果前面定義好了int型的數組 array[maxSize],int型變量min和max,需要用函數search()來找出數組的最大值和最小值,傳參的情況如下
        實參:    正確傳參    search(array,max,min);
                      錯誤傳參1    search(array[ ],max,min);
                      錯誤傳參2    search(array[maxSize],max,min);
                      錯誤傳參3    search(array,&max,&min);
        
        形參:    正確傳參1    void search(int *array,&max,&min){ }
                      正確傳參2    void search(int array[ ],&max,&min){ }
                      錯誤傳參1    void search(int array[maxSize],max,min){ }
        
        分析:實參的參數本身已經帶有數據類型,可以直接傳參,而形參則必須在傳參的同時生命參數的類型。傳參的時候注意,實參對應位置和形參對應位置的數據類型必須保持一致。
                  對於實參,search()函數第一個參數位置應該放入int *類型的變量array,即數組的首地址指針,不能放入array[ ]。而array[maxSize]的類型並不是int *,而是int型的變量array[50] (前面有宏定義的語句 #define maxSize 50),而且array[50]並沒有被賦值,所以用array[50]傳參就會報錯,因此錯誤1 2 是因爲第一個參數的類型不對;對於錯誤3,&max和 &min的類型都爲int*型的整形指針,而形參需要的是int型的變量,所以類型不對就會抱錯。千萬不能以爲&max表示max類型的引用,引用符號&只能對形參使用!
引用符號&只能對形參使用!引用符號&只能對形參使用!(重要的事情說三遍),如果對實參使用,則表示取地址,因此實參的類型就會變成指針類型;
                 對於形參,第一個位置穿進來的爲指針類型,因此可以用指針類型直接定義,爲正確傳參1的形式,也可以寫成正確傳參2形式的,但是這種形式(int array[ ])只能對形參使用,即只有形參定義的時候可以省略數組的長度!
只有形參定義的時候可以省略數組的長度!只有形參定義的時候可以省略數組的長度!同樣,如果是二維數組,省略形式爲(int array[][maxSize]),也即是說第二個下表不能省略,只能省略第一個下標。對於錯誤傳參1,沒有&引用的後果就是被調用函數search( )執行完以後調用函數裏面max和min的值不變!這樣基礎的錯誤自然不必多說。

示例代碼如下:
    
 
/* 線性表課後題3  以不多於3n/2的平均比較次數,找出n個整數的順序表A中的最大值和最小值

分析:可以利用if else 語句來減少比較次數;因爲最好的情況if成立,else就不用比較
所以比較次就可以減少一半

     */

#include <iostream>
using namespace std;
#define  maxSize  50
static int length = 10;

void search(int array[], int &max, int &min)
{
max = min = array[1];
for (int i = 1; i <= length;i++){
if (array[i] > max)max=array[i];
else if (array[i] < min)min = array[i];

}
}

int  main( )
{
int array[maxSize];
for (int i = 1,j=length; i <= length; i++,j--){ cout <<j<<": "; cin >> array[i]; }
for (int i = 1; i <= length; i++){ cout << array[i] << "  "; }

int max = 0;
int min = max;
search(array,max,min);
cout << "max" << max << "  min " << min << endl;
return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章