本文目錄一覽:
- 1、如何傳遞同一個數組作為多個函數參數進行操作?
- 2、(1) 如何向線程對應的函數傳遞參數?一個參數如何傳遞,多個參數如何傳遞? (2) 深入理解線程與進程的
- 3、當一個函數有多個形參時,那麼該函數再被調用時,實參值傳遞給形參時,傳遞的先後順序是怎樣的呢?
如何傳遞同一個數組作為多個函數參數進行操作?
問題有點不能理解。
1、C語言裡面不管有多個函數,執行的過程肯定有個先後順序。不能並行執行。
你要把一個數組傳遞個多個函數,第一個函數操作數組後數組肯定發生了變化
2、每個數組的內容是一樣的?
那麼你可以每個函數裡面定義一個數組,這樣用的時候就把參數數組拷貝到函數裡面定義的數組
3、還有一種比較笨重的方法。申請一個數組備份你要傳遞參數的數組。每次傳遞完後。把備份數組拷貝到你要傳遞的參數上。
(1) 如何向線程對應的函數傳遞參數?一個參數如何傳遞,多個參數如何傳遞? (2) 深入理解線程與進程的
構造一個結構體,其中的成員即為想要傳遞的參數類型。實例化一個結構體變數obj,將指向該結構體變數obj的指針賦給lpParameter即可。
簡單舉例:
。。。。。
struct DATA
{
int a;
int b;
int c;
};
DATA d = {1,2,3};
void ThreadName1(LPVOID lpParameter);
static HANDLE hHandle1=NULL;
DWORD dwThreadID1;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
hHandle1=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName1,(LPVOID) d ,0,dwThreadID1);
CloseHandle(hHandle1);
ExitThread(0);
return nRetCode;
}
void ThreadName1(LPVOID lpParameter)//參數為int型,傳參成功
{
DATA *p = (DATA *)lpParameter;//類型轉換
printf(“a = %d\n”,p-a);
printf(“b = %d\n”,p-b);
printf(“c = %d\n”,p-c);
}….
即可實現多參數的傳遞。
當一個函數有多個形參時,那麼該函數再被調用時,實參值傳遞給形參時,傳遞的先後順序是怎樣的呢?
這個問題是依賴於編譯器實現的,你只需知道目前大多數編譯器把C代碼翻譯成的彙編碼都是把參數從右至左壓棧的,在函數里使用某個參數時,並不會出棧,僅僅引用一個地址,如果你想了解其中的細節問題,可以看看INTEL彙編語言程序設計.並不是我不想在這裡解釋,說起來可能非常長篇,也未必能講得有書上那麼好.
但是你又不應該在你的代碼里依賴於這些C++標準沒有規定的順序,考慮以下語句,
int i = 1;
printf(“%d, %d\n”, i++, i++);
會輸出什麼?
以我的VC9為例,在Debug版本中輸出是2, 1(從右至左壓棧的結果,沒錯);
而在release版本中輸出的卻是1,1,看反彙編會發現,編譯器優化生成彙編碼時直接用1替換i++表達式了.
原創文章,作者:GBKDQ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329194.html