तो मैं लगा जब समारोह संकेत कर रही है, तो आप operator &
की जरूरत नहीं है प्रारंभिक समारोह का पता प्राप्त करने के पते: फिरसमारोह संकेत दिए गए और एक समारोह
>./a.out
100.000000
100.000000
fun1 = 0x4004f4 &foo = 0x4004f4
fun2 = 0x4004f4 foo = 0x4004f4
a = 0x7fff26804470
&a = 0x7fff26804470
:
#include <stdio.h>
double foo (double x){
return x*x;
}
int main() {
double (*fun1)(double) = &foo;
double (*fun2)(double) = foo;
printf("%f\n",fun1(10));
printf("%f\n",fun2(10));
printf("fun1 = %p \t &foo = %p\n",fun1, &foo);
printf("fun2 = %p \t foo = %p\n",fun2, foo);
int a[10];
printf(" a = %p \n &a = %p \n",a,&a);
return 0;
}
उत्पादन मुझे एहसास हुआ कि यह सरणी के लिए भी सच है, जिसका अर्थ है कि यदि आपके पास int a[10]
दोनों a
और &a
समान स्थान पर इंगित करते हैं। सरणी और कार्यों के साथ क्यों है? क्या पता किसी स्मृति स्थान में सहेजा गया है जिसमें वही पता है जैसा मूल्य (पता) में सहेजा जा रहा है?
मुझे कभी समझ में नहीं आया कि आपको फ़ंक्शन का पता लेने के लिए ऑपरेटर के पते का उपयोग क्यों नहीं करना पड़ा। मैंने हमेशा यह माना है कि सिंटैक्टिक चीनी का थोड़ा सा हिस्सा है। – Bill
@ बिल: बिल्कुल! यही वह है जो मैं हमेशा सोचने के लिए उपयोग करता हूं लेकिन ऐसा लगता है कि आपको इसकी आवश्यकता नहीं है! – GradGuy
यदि पता उसी स्मृति स्थान में सहेजा गया था, तो वास्तविक फ़ंक्शन कोड/सरणी डेटा नहीं हो सकता है! आप व्यावहारिक रूप से एरे को पॉइंटर्स के रूप में व्यवहार करेंगे और तर्क के रूप में तर्क के रूप में कार्य किए गए कार्यों को भी करेंगे, इसलिए आपको ऑपरेटर के पते की आवश्यकता नहीं होगी। असल में, किसी फ़ंक्शन या सरणी का 'मान' बकवास है।केवल पता ही समझ में आता है, इसलिए जब आप 'मान' से पूछते हैं, और जब आप पता पूछते हैं तो आपको यह मिलता है। –