Anonymous
Anonymous asked in 電腦與網際網路程式設計 · 1 decade ago

struct MyType{int i;float x;}?

我想要使用struct MyType {

int i; float x;

}

來撰寫函式swap(struct MyType *a , struct MyType *b)

將a,b內容互換

我該怎麼編寫(運用較基本的方式來寫)

請問C語言高手們該怎麼寫 謝謝

2 Answers

Rating
  • Allen
    Lv 4
    1 decade ago
    Favorite Answer

    #include<iostream>

    struct MyType { //結構宣告

    int i;

    float x;

    }data1,data2; //宣告兩個結構變數;

    void swap(struct MyType *a , struct MyType *b); //函數宣告

    using namespace std;

    int main(){

    struct MyType *a,*b; //宣告兩個結構指標

    a=&data1; //將指標a指向資料1

    b=&data2; //將指標b指向資料2

    data1.i=1; //指定結構變數data內的值

    data1.x=0.5;

    data2.i=50;

    data2.x=5.5;

    cout<<"data1 => "<<data1.i<<" , "<<data1.x<<endl; //輸出原始資料

    cout<<"data2 => "<<data2.i<<" , "<<data2.x<<endl;

    swap(a,b); /*呼叫函數swap,在這裡傳*a或a都可以,只是一種傳值,一種傳址,因為是結構的關係,

    所以沒啥差,都是某個記憶體位置,...老實說...這裡我觀念也是蠻模糊的,聽聽就好...

    我也不確定我觀念對不對...反正兩種都可以就對了...XD */

    cout<<"交換後 =>"<<endl;

    cout<<"data1 => "<<data1.i<<" , "<<data1.x<<endl; //輸出交換後資料

    cout<<"data2 => "<<data2.i<<" , "<<data2.x<<endl;

    system("PAUSE");

    return 0;

    }

    void swap(struct MyType *a , struct MyType *b){ /*這裡算是又宣告兩個結構指標,

    指到傳入的兩個結構的記憶體位置*/

    struct MyType temp; //宣告一個結構變數temp來做交換用

    temp=*a; //a,b做交換

    *a=*b;

    *b=temp;

    }

    • Commenter avatarLogin to reply the answers
  • 1 decade ago

    swap(struct MyType *a , struct MyType *b)

    這一行除了指標外可以視為

    swap(struct MyType a[] , struct MyType b[])

    array形態傳入的參數

    是代表這個陣列的起始位置

    既然是位址 就代表值會跟著FUNCTION變動

    如宣告 MyType a,b;

    只需要加入&傳入參數

    swap(&a,&b);

    如宣告 MyType a[5],b[5]

    則不須指定位址..因為他本身就會傳入陣列的第一個位址

    swap(a,b);

    另外如宣告成全域變數

    就不需要傳入參數

    直接呼叫 swap();

    • Commenter avatarLogin to reply the answers
Still have questions? Get your answers by asking now.