यहां हम C++ में वेरिएबल लेंथ एरे के बारे में चर्चा करेंगे। इसका उपयोग करके हम परिवर्तनीय आकार की एक ऑटो सरणी आवंटित कर सकते हैं। सी में, यह सी 99 मानक से परिवर्तनीय आकार के सरणी का समर्थन करता है। निम्न प्रारूप इस अवधारणा का समर्थन करता है -
void make_arr(int n){ int array[n]; } int main(){ make_arr(10); }
लेकिन, C++ मानक (C++11 तक) में परिवर्तनीय लंबाई सरणी की कोई अवधारणा नहीं थी। सी ++ 11 मानक के अनुसार, सरणी आकार को निरंतर अभिव्यक्ति के रूप में वर्णित किया गया है। तो, कोड का उपरोक्त ब्लॉक मान्य C++ 11 या उससे कम नहीं हो सकता है। C++14 में एक साधारण व्यंजक के रूप में सरणी आकार का उल्लेख है (स्थिर-अभिव्यक्ति नहीं)।
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include<iostream> #include<cstring> #include<cstdlib> using namespace std; class employee { public: int id; int name_length; int struct_size; char emp_name[0]; }; employee *make_emp(struct employee *e, int id, char arr[]) { e = new employee(); e->id = id; e->name_length = strlen(arr); strcpy(e->emp_name, arr); e->struct_size=( sizeof(*e) + sizeof(char)*strlen(e->emp_name) ); return e; } void disp_emp(struct employee *e) { cout << "Emp Id:" << e->id << endl; cout << "Emp Name:" << e->emp_name << endl; cout << "Name Length:" << e->name_length << endl; cout << "Allocated:" << e->struct_size << endl; cout <<"---------------------------------------" << endl; } int main() { employee *e1, *e2; e1=make_emp(e1, 101, "Jayanta Das"); e2=make_emp(e2, 201, "Tushar Dey"); disp_emp(e1); disp_emp(e2); cout << "Size of student: " << sizeof(employee) << endl; cout << "Size of student pointer: " << sizeof(e1); }
आउटपुट
Emp Id:101 Emp Name:Jayanta Das Name Length:11 Allocated:23 --------------------------------------- Emp Id:201 Emp Name:Tushar Dey Name Length:10 Allocated:22 --------------------------------------- Size of student: 12 Size of student pointer: 8