2013-04-02 74 views
3

這是我在C程序:如何從函數上使用C該字符串的指針返回打印字符串?

#include <stdio.h> 

char const* voice(void){ 
    return "hey!"; 
} 

int main(){ 
const char* (*pointer)(void); 
pointer = &voice; 


printf ("%s\n", *pointer); // check down * 
return 0; 
} 
  • *這個我試圖打印的內容是從指針返回,但好像不工作。

我在做什麼錯?

+0

我猜你想保持函數指針的東西,所以只要調用函數,而不是提領的; 'printf(「%s \ n」,pointer());' – Dave

回答

4

您通過您直接調用一個函數完全相同的方式指針調用一個函數,因爲如果該指針是函數的名稱:

printf ("%s\n", pointer()); 

與ANSI C標準開始,周圍的星號和&函數指針是可選的。

+4

替代符號是'(* pointer)()',帶括號和星號。 '* pointer()'是有效的,但返回函數指針返回的字符串的第一個字符。 –

+0

非常感謝。它的工作:) – Tommz

6

你需要調用的函數指針,即使用括號:不需要函數指針

#include <stdio.h> 

char const* voice(void){ 
    return "hey!"; 
} 

int main(){ 
const char* (*pointer)(void); 
pointer = &voice; 


printf ("%s\n", pointer()); 
//    ^^^^^^^^^ 
return 0; 
} 

*。 (既不是&

+0

非常感謝。是的,我問自己爲什麼'pointer = voice;'也在工作。 – Tommz