ICE如何傳遞乙個結構體指標

2021-07-06 10:11:46 字數 776 閱讀 7404

比如函式為

struct ******;

void get******(****** *s);

這種c中的方式在ice slice語言中是不能實現的

因為ice slice語言函式不接受結構體指標

所以可以吧******定義為類

class ****** ;

即便是這樣也不能直接定義void get******(****** *s);來傳遞乙個類指標

因為ice會把這個slice函式重新定義(用slice2cpp工具)為void get******(******prx&);

這裡面printerprx&並不是真正的類指標,而是乙個**,它無法訪問類中的成員

所以正確的做法應該是用引用方式傳遞乙個類

void get******(out ****** s);,

這樣ice會把這個函式重定義(slice2cpp)為

void get******(******ptr& s);

注意乙個是******prx,乙個是******ptr

******ptr這個類就可以通過******ptr->message,直接訪問類成員變數了

s也可以通過new ******,直接定義。******prx是沒法直接new的

還有乙個問題就是客戶端訪問void get******(******

ptr&

s);這個函式的時候,

不需要提前new出這個類

直接******ptr s;

get******(s);

就可以了

乙個結構體傳遞方式的問題

結構體做函式引數有兩種傳遞方式 一是傳遞結構體變數,這是值傳遞 二是傳遞結構體指標,這是位址傳遞。struct key number struct key number keynum 前幾天犯了乙個失誤,在傳遞結構體變數時使用值傳遞,由於在函式中修改的是區域性變數,導致函式外的全域性變數沒被修改到。...

結構體申請記憶體錯誤 傳遞了乙個指標的拷貝

今天在寫lua指令碼的申請函式時出現了乙個低階錯誤,在乙個函式中申請new,但是傳遞進去的是乙個指標,如下init1 函式 這樣寫其實是錯誤的 正確地寫法應該是init 或者可以修改init1返回申請的值。我一直以為我這樣是傳的指標,但是其實我這樣的寫法是傳的值。include using name...

結構體和結構體指標作為引數傳遞

結構體作為引數傳遞 include includeusing namespace std 宣告結構體 struct namect 函式宣告必須提供資料型別,但是可以不傳引數 struct namect getinfo void 宣告函式的返回值是乙個結構體,引數型別也是結構體,這裡結構體作為引數值直...