मैंने बफर को आकार 100 पर सेट किया है। मैं बफर को मुख्य समारोह में प्रदर्शित करता हूं जहां बफर घोषित किया जाता है। हालांकि, जब मैं फ़ंक्शन में बफर पास करता हूं और '4', का आकार प्राप्त करता हूं, तो मुझे लगता है कि यह 100 होना चाहिए, क्योंकि यह बफर का आकार है जो Iमुख्य में बनाया गया है। उत्पादन: बफर आकार: 100 sizeof (बफर): 4फ़ंक्शन के लिए चार बफर पास करने और बफर के आकार को प्राप्त करने के लिए
#include <string.h>
#include <stdio.h>
void load_buffer(char *buffer);
int main()
{
char buffer[100];
printf("buffer size: %d\n", sizeof(buffer));
load_buffer(buffer);
return 0;
}
void load_buffer(char *buffer)
{
printf("sizeof(buffer): %d\n", sizeof(buffer));
}
मुख्य में() आपने स्पष्ट रूप से एक सरणी घोषित की है, जबकि load_buffer() में आपने एक सूचक घोषित किया है। अंतर मुख्य रूप से() में संकलक जानता है कि बफर एक सरणी है, लेकिन load_buffer() में संकलक यह नहीं जानता कि बफर किसी सरणी से है या ढेर में स्मृति की आवंटित शांति, या संरचना या जो भी हो । कंपाइलर केवल मेमोरी एड्रेस (इस प्रकार एक पॉइंटर) जानता है, इसलिए आकार() मेमोरी एड्रेस का आकार देता है, जो कि 4 बाइट लंबा है (क्योंकि यह 32 बिट मशीन है, अगर यह 64 बिट्स मशीन थी, तो यह 8 होगा लंबे बाइट्स)। उम्मीद है कि यह थोड़ा और समझने में मदद करता है। – AndaluZ
आकार() फ़ंक्शन के बजाय, strlen() का उपयोग करें, फिर यह सूचक मूल्य का आकार देता है। – NandhaKumar