निम्न कोड में:और ऑपरेटर समारोह सूचक काम में वैकल्पिक
/* mylog.c */
#include <stdio.h>
#include <stdlib.h> /* for atoi(3) */
int mylog10(int n)
{
int log = 0;
while (n > 0)
{
log++;
n /= 10;
}
return log;
}
int mylog2(int n)
{
int log = 0;
while (n > 0)
{
log++;
n >>= 1;
}
return log;
}
int main(int argc, const char* argv[])
{
int (*logfunc)(int); /* function pointer */
int n = 0, log;
if (argc > 1)
{
n = atoi(argv[1]);
}
logfunc = &mylog10; /* is unary '&' operator needed? */
log = logfunc(n);
printf("%d\n", log);
return 0;
}
लाइन में
logfunc = &mylog10;
मैंने देखा है एकल &
ऑपरेटर (का पता) वैकल्पिक है कि, और कार्यक्रम संकलित करता है और इसके साथ या इसके बिना (जीसीसी 4.2.4 के साथ लिनक्स में) उसी तरह चलता है। क्यूं कर? क्या यह एक कंपाइलर-विशिष्ट मुद्दा है, या शायद दो अलग-अलग भाषा मानकों को संकलक द्वारा स्वीकार किया जा रहा है? धन्यवाद।
बीटीडब्ल्यू- क्या इसका मतलब यह है कि फ़ंक्शन पॉइंटर "उसी तरह व्यवहार करता है" फ़ंक्शन के संदर्भ के रूप में व्यवहार करेगा? – Kos
@ कोस: यह स्रोत-कोड स्तर पर वैसे ही व्यवहार कर सकता है, हालांकि समानता पूरी तरह से सतही है: अंतर्निहित सार भाषा यांत्रिकी अलग है। फिर भी, यदि आप गहराई से खोदते हैं और मशीन-स्तरीय यांत्रिकी को देखते हैं, तो आप देखेंगे कि वे वही दिखाई देते हैं। – AnT