2014-02-21 16 views
0

我用函數指針在這一點,但無法理解,爲什麼它不工作,這是我的一段代碼。當我運行這個代碼時,我得不到輸出,我期望在命令行給-r時打印升序和升序,並且如果沒有給出命令行輸入,它應該打印升序。使用函數指針程序

出了什麼事在我的代碼?

#include <stdio.h> 
#include <stdlib.h> 

void decending_sort() { 
    printf ("Decending order \n"); 
} 

void ascending_sort() { 
    printf ("Ascending order \n"); 
} 

int main(int argc, char **argv) { 

int i; 
void (*sort)(); 

while (*++argv) { 
    if ((strcmp (*argv, "-r")) == 0) 
     sort = decending_sort; 
} 
sort = ascending_sort; 
} 
+1

我沒有看到呼叫's ort'。 –

回答

5

您定義sort作爲函數變量的值賦給它,但從來沒有稱呼它,這樣既沒有decending_sort()也不ascending_sort()是不斷執行。

要調用它添加此最後一行`main()的

[...] 

    sort(); 
} 

另外:不帶任何參數的函數應聲明如下:

void decending_sort(void); 

要麼應該是一個變量他們的類型

void (*sort)(void); 
+0

爲什麼我需要添加排序();在主線,我已經創建了一個函數指針,並將該函數的地址傳遞給它,它應該自動切換到該功能的權利。能否請您解釋 – user3336874

+0

@ user3336874:說的是機器的一些函數的地址存儲在某個地方還沒有告訴機在該地址執行代碼(如通過分配東西'sort'完成)砥。 – alk

+1

@ user3336874賦值很好,但只要你不用'sort()'調用函數,它將如何執行? –