C語言,不定引數的函式指標問題

2022-12-28 16:00:03 字數 3908 閱讀 8611

1樓:匿名使用者

很巧我現在正好也有實現這樣函式的需求,其實就是看了c語言可變引數函式的相關資料,你就差不多知道怎麼實現了。

只不過其中有乙個很重要的大坑,只要邁過去就沒問題。我是試了半天才明白的:

如果引數是char或float型別,這樣的引數放在可變引數部分的話,編譯器是會預設把它們的型別提公升為相應的「全」型別的:char提公升為int,float提公升為double。如果你沒注意這一點就會出現錯誤。

當然可以通過指標的型別轉換來避免。

先簡略地點一下,等我在csdn部落格裡詳細地寫一寫心得吧。雖然是n年前的問題估計樓主早就自己解決了,但希望能幫到其他人:)

2樓:佛說有輪迴

這其實是乙個函式的過載問題,就像我們在呼叫數序函式裡面的fabs()函式是一樣的道理,我們在呼叫fabs()函式的時候,但是你的值的型別雖然是不一樣但是也是可以進行運算,是應為在處理的時候整形求絕對值和浮點型求絕對值是作為了兩個不一樣的函式來進行求解的。

3樓:網友

c語言中有特定的標頭檔案處理這個問題。

看了這篇文章你就明白了。

c語言 麻煩幫寫個不定引數函式的程式

4樓:匿名使用者

c++中有這個功能,就是函式的過載,不過每個函式都要編寫。

其實你用陣列來傳遞引數不更好,這樣傳遞乙個陣列,和乙個陣列資料個數過去不就可以了。

int f(int *a,int n)

5樓:網友

#include ""

//n表示輸入引數,總的個數,後面是各個元素的值int va_add(int n,..return t;

}int main()

c語言中用乙個函式指標作為另乙個函式的引數,該怎麼解決

6樓:sshhff鳳

首先需要宣告函式指標的型別(下例子中的typedef int (*fpfunt)(int a,int b),再定義某個函式(下例中的add),在其引數列表中使用該函式指標型別,同時需要定義另一函式(下例中的fpadd,注意該函式形式要和fpfunt一致,本例子中是返回乙個整數,兩個整型引數)作為實參用。這裡在手機上使用易歷知食軟體內的微c程式設計來程式設計,舉個兩個數相加的例子,**如下圖:

呼叫後執行結果如下圖:

7樓:茄子絕殺

在寫這個函式時輸入定義為引用,比如。

void funcation(int &a);

// a表示進來的是乙個指標變數,指向乙個int型變數//呼叫時寫:

int temp = 5;

int *p = temp;

funcation(p);

8樓:匿名使用者

這個是指向函式的指標,屬於c的高階技術了,一般人不用掌握。

9樓:匿名使用者

首先還能輸指標是乙個指標,這個指標指向的是乙個函式,而你說這個函式指標又作為另乙個函式的形參,那你形參執行這個函式的時候,就直接把這個函式指標作為整體代進去計算就是了,就相當於帶乙個指標,因為函式指標它就是乙個指標。

c語言中指標作為函式引數的問題。

10樓:匿名使用者

更正以下樓主的問題補充,swap函式的兩個引數,定義的時候,定義p1和p2,他們都int*型別的,也就是兩個整型指標的型別。主函式傳遞進來的是a和b的位址,swap函式是將兩個位址的值,也就是*p1和*p2交換,達到的效果是將兩個位址上的值交換。

11樓:濤褪荒蕪

o(∩_o哈哈~。在函式宣告和定義時fun(int p1,int p2)是不是表示它的引數是兩個int型的整數。fun(int* p1,int* p2)則使表示它的引數是兩個指標型別的。

定義和宣告時的變數只是代替符,其它的運算符號與型別符號加起來才是引數型別。你如果覺得不好理解,那麼在寫的時候就把int 和*放在一起(int*),這就是引數型別。

12樓:只會做土豆配西紅柿

恩,int *p1 代表的不就是int a嗎!!!不是一樣的,程式沒有錯啊。

13樓:

沒有任何錯誤啊!

p1,p2本來就是int*型別的,swap引數也是int*型別的, if(a>b) swap(p1,p2);這一句沒錯啊!swap本來就需要指標變數,p1,p2正好又是指標變數,直接寫上去就可以了!

swap() 中是 int *p1 和int *p2這是因為這是swap的定義,既然是定義就要宣告引數的型別,這裡宣告的是int*型別,那使用的時候就要傳遞int*型別的。主函式裡的型別也是int*,對應上了,就可以了。

在定義變數的時候,建議你把*和資料型別當做乙個整體,看成一種新的資料型別,不要把*和變數看做乙個整體。比如int* p,int*是乙個資料型別,p是變數名。

c語言 關於指標變數做函式引數的乙個問題

14樓:匿名使用者

void swap2(int *px,int *py)swap2函式的功能是交換兩個指標指向的值,函式內部都是指標的操作,根本沒有改變指標指向的值,所以px和py指向的值沒有交換。

c語言指標作函式引數時的返回問題

15樓:匿名使用者

首先,弄懂函式引數都是靠值傳遞。指標也是。

進入函式後,函式建立幾個空間給形參,再把實引數值拷過來。退出函式時,把形參空間釋放,則影響不到實參。這就是值傳遞。

swap(int *p1,int *p2)函式首先建立兩個空間,是指標,再把實參複製過來,即改變p1,p2就分別指向了a,b.改變p1指向的值就是改變了a。然後交換*p1,*p2,ab就互換了。

函式退出,釋放p1,p2所佔的記憶體空間。但是a,b值互換了。swap函式沒有改變實參pointer_1,pointer_2的內容,只是借助指標實現了巧妙的乾坤大挪移。

學到c++後有個引用例外,那是後話了。

+++華麗麗的分割線+++

其實很簡單,不要硬記規律,要理解了。

第二個例子中swap(int x,int y)沒有改變原來實參a,b的值。

第乙個例子中swap(int *p1,int *p2)也沒有改變原來兩個實參pointer_1,pointer_2的值,他們值分別是是a,b位址,但pointer_1,2指向的內容改變了,改的是以pointer_1,pointer_2的值為位址的記憶體單元的值。

16樓:匿名使用者

是通過位址傳遞的,每個變數,在記憶體中都有乙個位址,把這個位址傳給其他函式時,你在其他函式中,對這個變數進行修改,因為傳遞的是位址,所以你在修改這個變數的時候,你修改的其實就是原來的那個,不需要返回了。

關於c語言函式引數中指標傳遞的疑問 30

17樓:物理公司的

os_event應該是乙個結構體的名字把 os_event*pevent表示l是指向os_event型別的結構體的指標 這個時候用os_event->(屬性)

os_event l表示l就是乙個os_event型別的結構體 這個時候用os_

18樓:匿名使用者

os_event* 這應該是乙個函式指標,對於函式指標 *操作後得到的還是函式指標。

關於c語言自定義帶函式指標型別引數的函式指標資料型別問題,詳情請看源**。捉急啊!

19樓:匿名使用者

(*t_t)(a,b,10);看看你的這個第三個引數,10啊,10不是變數啊,是常量啊,在pp裡有這句話,g=0;呼叫(*t_t)(a,b,10);也就是希望把10=0(和g=0對應),常量不能賦值啊。

C語言指標建立函式問題,C語言指標呼叫函式問題,急求解釋(本題是《c和指標》上的題目)

第乙個表示傳遞graphadjlist型別的引用g,第二個表示傳遞graphadjlist型別的指標g 另外這是c 不是c。c語言指標呼叫函式問題,急求解釋 本題是 c和指標 上的題目 c語言指標作函式引數時的返回問題 首先,弄懂函式引數都是靠值傳遞。指標也是。進入函式後,函式建立幾個空間給形參,再...

c語言函式和指標的問題,C語言函式和指標的問題

第乙個猜測 void operatestate u8 其中operatestate是個函式指標 等效於void operatestate u8 類似第三個 第二個確定 void getoperatestate void u8 其中getoperatestate void 為函式體void u8 為返...

C 指標的問題,C語言指標問題

這麼說吧,指標是以後資料結構的基礎,比如單鏈表,雙鏈表,二叉樹等等等等,全部都時指標做的,還有1720次對於現在的計算機來說,是個很小很小很小的數量級。指標學好了受益匪淺,並且也是程式設計今後必須的。指標的確是可以大大提高效率,但是要看你怎麼用,就和遞迴演算法一樣,另外,顯示位址是你語句的問題。比如...