當前位置:首頁 » 編程語言 » c語言函數傳遞指針

c語言函數傳遞指針

發布時間: 2022-06-14 13:42:05

c語言指針傳遞問題

指針傳遞、引用傳遞指的就是調用函數時傳遞的是指針、引用。 與之對應的還有傳值方式。這種方式只是傳遞了變數的一個副本。也就是說只傳了一個值而已,並不是這個變數,所以就無法對這個變數更改了。而傳遞指針或者引用就不一樣了。傳遞的是一個變數地址,那麼你更改這個地址對應的內容也就是修改這個變數了。
所以在數組排序子函數中進行的排序操作就會直接作用到你的主函數中的數組了。這樣,當返回主函數後,你定義的數組內容已經發生了變化。這就是指針傳遞的價值了。
lyqf365|說的「 用引用來傳數組好傳不太靠譜。。。。。」, 好像我也沒見過引用傳遞數組的。 你自己可以探索一下。還有,如果定義引用的話,別忘了同時要對其進行初始化,這是和指針的不同點。

② C語言的函數指針傳遞問題

BSTree T 作為函數參數傳遞給InsertBST,只是它的拷貝
所以函數執行結束,T本身所指向的內容是不會改變的
所以這時需要傳引用,或者兩級指針(C語言沒有引用)

③ c語言傳遞函數指針

intcmp是和GetKeyFunc_t對應起來的。
而你現在錯在了CmpFunc_t這個函數參數上了。
你把怎樣的函數參數指針傳給了BST_t *newBST?
你沒交代清楚啊,你把錯誤指針傳給newBST函數的第一個參數,編譯器肯定報錯了。你給了那麼多代碼,關鍵你把什麼傳給了BST_t *newBST的第一個參數?給一下你調用這個newBST函數的代碼,而且要你傳給該函數第一個參數的參數定義。
另外給個建議:定義函數時,記得對傳進來的參數進行合法性檢驗。多加幾行代碼是很有必要的,能增強函數的健壯性。(微軟也好,ISO也好,都對大部分函數設計時要求做必要的合法檢驗)

④ C語言指針傳遞問題

變數FunP是什麼類型的呢?MyFun()函數的函數原型是怎樣的呢?FunP是函數指針變數吧。

你問題都沒描述清楚,怎麼幫你解釋啊?用程序來驗證說明,如下:

#include<stdio.h>

voidMyFun()
{
printf("Thisismyfunction! ");
}
intmain()
{
void(*FunP)();//聲明函數指針變數
FunP=MyFun;
printf("MyFun=0x%p ",MyFun);//%p是列印出地址值,16進制輸出,下同
printf("FunP=0x%p ",FunP);
FunP=&MyFun;
printf("&MyFun=0x%p ",&MyFun);
printf("FunP=0x%p ",FunP);
return0;
}

//運行結果如下:
MyFun=0x00401350
FunP=0x00401350
&MyFun=0x00401350
FunP=0x00401350

//從運行結果來看,MyFun和&MyFun的值是一樣的,所以兩個賦值都是將MyFun函數的地址賦給FunP變數。

⑤ 在C語言中,函數傳參時怎樣利用指針傳遞數組

比如函數需要一個整型數組:

void ex(int a[])

{

}

或者可以寫成:

void ex(int *a)

{

}

效果是一樣的。

使用的時候:

引用數組中的第2個元素(即下標為1的元素)

a[1]

或者*(a+1)

基本上與數組的正常使用沒有區別。

⑥ 關於C語言函數參數中指針傳遞的疑問

OS_EVENT應該是一個結構體的名字把 OS_EVENT*pevent表示L是指向OS_EVENT類型的結構體的指針 這個時候用OS_EVENT->(屬性)

OS_EVENT L表示L就是一個OS_EVENT類型的結構體 這個時候用OS_EVENT.num

⑦ c語言 函數參數傳遞 與指針問題

這是個函數指針 前面的void為返回值類型 後面的void*為參數類型.

函數指針是可以作為某個函數的參數的.

(1) 指向函數的指針變數的一般定義形式為:
數據類型 (*指針變數名)(函數參數列表)
函數名是可以預設的 作為參數傳遞的時候會去調和 void*(*)(void*)這個類型相匹配的函數的
作為參數調用這個函數的時候 返回類型是void* 就相當於傳了一個參數類型為void*,當然這個函數指針的參數也是void*的

⑧ C語言 關於函數形參傳遞指針類型

按你的意思,應該是
AllPtr[0][0] = 'A';
AllPtr[0][0] = 'B';
AllPtr[0][0] = 'C';

⑨ C語言指針在函數中的傳遞問題

*x++;
是指針加1,不是值加1

~
~
~

⑩ 關於C語言函數傳遞指針參數,幫我看看我的程序

你的地址值傳遞錯誤,按照我給你修改的試試看,一定要注意你的實參傳遞的是地址還是具體的值,如果是地址,在子函數中就不要去修改你傳遞進來的地址。
int
main(void)
{
int
data=0;
//此處隨機分配內存空間,不要用指針
myStack=makeStack(myStack,top);
Push(myStack,3);
Push(myStack,8);
Push(myStack,19);
Push(myStack,31);
Push(myStack,43);
Push(myStack,36);
Pop(myStack,&data);//此處,傳遞的是地址值
printf("%d
",data);
}
int*
Pop(LinkedStack
myStack,int
*data)
{
pStack
cursor=myStack;
if(Stack_Empty())
{
}
else
{
while(cursor->next!=top)
{
cursor=cursor->next;
}
*data=top->data;
//此處,只是在同一個內存空間修改其值,所以不要取地址
top=cursor;
return
data;
}
}

熱點內容
sqlserver連接驅動 發布:2024-05-06 00:33:34 瀏覽:645
存儲開銷 發布:2024-05-06 00:13:38 瀏覽:953
伺服器怎麼盈利 發布:2024-05-05 23:56:16 瀏覽:941
java網站培訓學校 發布:2024-05-05 23:43:11 瀏覽:40
淘寶搜索演算法 發布:2024-05-05 23:37:07 瀏覽:998
sqlwhencasethen 發布:2024-05-05 23:27:51 瀏覽:641
模架編程軟體 發布:2024-05-05 23:26:54 瀏覽:483
存儲過程異常 發布:2024-05-05 23:24:03 瀏覽:399
winxp訪問不了win7 發布:2024-05-05 23:05:23 瀏覽:734
演算法牛 發布:2024-05-05 22:43:40 瀏覽:720