कृपया निम्नलिखित कोड देखें। यह char**एक फ़ंक्शन के रूप में एक सरणी पास करने की कोशिश करता है :
#include <stdio.h>
#include <stdlib.h>
static void printchar(char **x)
{
printf("Test: %c\n", (*x)[0]);
}
int main(int argc, char *argv[])
{
char test[256];
char *test2 = malloc(256);
test[0] = 'B';
test2[0] = 'A';
printchar(&test2); // works
printchar((char **) &test); // crashes because *x in printchar() has an invalid pointer
free(test2);
return 0;
}
तथ्य यह है कि मैं इसे केवल स्पष्ट रूप &test2से char**पहले ही संकेत देने के लिए कास्टिंग करके संकलन करने के लिए प्राप्त कर सकता हूं कि यह कोड गलत है।
फिर भी, मैं सोच रहा हूं कि इसके बारे में क्या गलत है। मैं एक पॉइंटर को पॉइंटर को डायनेमिक रूप से आवंटित एरे में पास कर सकता हूं लेकिन स्टैक पर एरे के लिए पॉइंटर को पॉइंटर पास नहीं कर सकता। बेशक, मैं आसानी से एक अस्थायी चर के लिए सरणी असाइन करके समस्या के आसपास काम कर सकता हूं, जैसे:
char test[256];
char *tmp = test;
test[0] = 'B';
printchar(&tmp);
फिर भी, कर सकते हैं किसी कारण है कि यह कलाकारों को काम नहीं करता है मुझे समझा char[256]करने के लिए char**सीधे?
char (*)[256]करने की अनुमति क्यों देता हैchar**?