作為入參的出參指標

2021-10-04 12:58:25 字數 1515 閱讀 8486

若實為入參,則是傳入資料,此時一般為char *,即傳入讀取資料的位址

若實為出參:

1維指標,若已經為該位址申請記憶體或該指標指向一塊可改寫的記憶體區域,則一般為char *,傳入欲寫入資料的位址;

2維指標,若沒有為該位址申請記憶體,欲讓被呼叫函式在內部進行記憶體申請而在外部記憶體釋放,則必須傳入指標的位址而不是指標指向的資料的位址,即char **

注意:*與的優先順序: > *;這種型別的入參在不使用時需要進行初始化,因為可能為亂碼,且會被呼叫方使用。

static int comp(const void* a, const void* b)

// 輸入引數:intervals是陣列指標,常規用法

// 輸入引數:intervalssize是陣列行數,常規用法

// 輸入引數:intervalscolsize是陣列列數指標,我又不去改它列數,為什麼要指標而不是整型,求指教,劃為迷惑用法

// 輸出引數:returnsize是返回陣列行數,此處指定方便平台編譯,可以理解,因此預設需要手動初始化,也就是印證了上面note的說法,常規用法

// 輸出引數:returncolumnsizes是返回列數的陣列指標,非常迷惑,極盡困擾,稍一不慎,顯得自己很笨,先說明它不是返回二維陣列的二級指標,用法如下分解,歸為**用法

int** merge(in int** intervals, in int intervalssize, in int* intervalscolsize, out int* returnsize, out int** returncolumnsizes) // 此時返回的二維陣列建立完畢

*returncolumnsizes = (int*)malloc(intervalssize * sizeof(int));

// 為神秘的returncolumnsizes指標變數初始化分配一段空間

// 元素個數為行數,每個元素用來存放該行的列數

__________frame_end__________

qsort(pstart, intervalssize, sizeof(int), comp);

qsort(pend, intervalssize, sizeof(int), comp);

for (row = 0; row <= intervalssize - 1; row++)

}pres[*returnsize][1] = pend[row];

(*returncolumnsizes)[*returnsize] = 2;

// 坑貨來了,這裡要每次給returncolumnsize賦值列數值,若列數不同還有點用,若列數相同頓顯詭譎

// 注意優先順序,的優先順序比*高,所以要加括號,因為是給*returncolumnsizes分配了空間,沒對returncolumnsizes分配過空間

(*returnsize)++;

// 這裡自增就行,最後反正長度和下標相差1,這裡把returnsize當作下標用剛好抵消了

__________frame_end__________

}return pres;

指標作為函式形參

先來看兩個程式 程式1 include void fun int p int main void 輸出為 程式2 include void fun int p int main void 輸出為 對於程式2,不難理解 程式1,明明改變了p的指向了,為什麼還是輸出1呢?其實問題的關鍵不是指標作為形參的...

使用AOP 註解實現記錄方法入參出參

有時候我們希望記錄某些方法的入參出參,但是有的時候切面可能把所有符合條件的切面的入參出參都記錄了,沒有很多的必要,有些方法記錄入參出參沒有過大的意義,所以我們可以利用註解 aop 實現針對註解方法的入參出參記錄 註解類 target retention retentionpolicy.runtime...

SpringBoot利用Aop列印入參出參日誌

以前寫 不會用aop的時候,記錄入參出參的日誌列印都是在controller中完成的,每個controller的方法開始之前先列印個日誌,然後方法返回之前再列印一行日誌,雖然以前也感覺到這個 比較冗餘,也知道aop可以實現日誌列印,但是思維固話了,也習慣了,也就得過且過了。直到接到上任同事留下的專案...