संभव डुप्लिकेट:
How to find the sizeof(a pointer pointing to an array)सी sizeof एक पारित कर दिया सरणी
मैं समझता हूँ कि sizeof ऑपरेटर का मूल्यांकन किया और संकलन समय पर एक निरंतर साथ बदल दिया है। यह देखते हुए कि, एक समारोह में एक कार्यक्रम में अलग-अलग बिंदुओं पर अलग-अलग सरणी कैसे पारित की जा सकती हैं, क्या इसका आकार गणना किया गया है? मैं इसे फ़ंक्शन के पैरामीटर के रूप में पास कर सकता हूं, लेकिन अगर मुझे पूरी तरह से नहीं करना है तो मुझे एक और पैरामीटर जोड़ना नहीं होगा।
यहाँ वर्णन करने के लिए मैं क्या पूछ रहा हूँ एक उदाहरण है:
#include <stdio.h>
#include <stdlib.h>
#define SIZEOF(a) (sizeof a/sizeof a[0])
void printarray(double x[], int);
int main()
{
double array1[ 100 ];
printf("The size of array1 = %ld.\n", SIZEOF(array1));
printf("The size of array1 = %ld.\n", sizeof array1);
printf("The size of array1[0] = %ld.\n\n", sizeof array1[0]);
printarray(array1, SIZEOF(array1));
return EXIT_SUCCESS;
}
void printarray(double p[], int s)
{
int i;
// THIS IS WHAT DOESN"T WORK, SO AS A CONSEQUENCE, I PASS THE
// SIZE IN AS A SECOND PARAMETER, WHICH I'D RATHER NOT DO.
printf("The size of p calculated = %ld.\n", SIZEOF(p));
printf("The size of p = %ld.\n", sizeof p);
printf("The size of p[0] = %ld.\n", sizeof p[0]);
for(i = 0; i < s; i++)
printf("Eelement %d = %lf.\n", i, p[i]);
return;
}
मानक सी गॉचा - प्रश्न से जुड़े देखें। – Jon
'आकार' को सी 99 में संकलन समय पर मूल्यांकन नहीं किया जाना चाहिए - वीएलए 'आकार' के साथ ठीक से काम करते हैं, और उनका आकार केवल रनटाइम पर ही जाना जा सकता है। –