Computer >> Máy Tính >  >> Lập trình >> lập trình C

Mảng có độ dài thay đổi trong C và C ++


Ở đây chúng ta sẽ thảo luận về mảng độ dài thay đổi trong C ++. Sử dụng điều này, chúng ta có thể phân bổ một mảng tự động có kích thước thay đổi. Trong C, nó hỗ trợ các mảng có kích thước thay đổi từ tiêu chuẩn C99. Định dạng sau hỗ trợ khái niệm này -

void make_arr(int n){
   int array[n];
}
int main(){
   make_arr(10);
}

Tuy nhiên, trong tiêu chuẩn C ++ (cho đến C ++ 11) không có khái niệm về mảng độ dài thay đổi. Theo tiêu chuẩn C ++ 11, kích thước mảng được đề cập như một biểu thức hằng số. Vì vậy, khối mã trên có thể không phải là C ++ 11 hợp lệ hoặc thấp hơn. Trong C ++ 14 đề cập đến kích thước mảng như một biểu thức đơn giản (không phải biểu thức hằng).

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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);
}

Đầu ra

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