দয়া করে নীচের কোডটি একবার দেখুন। এটি 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**?