C和C ++中的可变长度数组

在这里,我们将讨论C ++中的可变长度数组。使用这个我们可以分配一个可变大小的自动数组。在C语言中,它支持C99标准的可变大小数组。以下格式支持此概念-

void make_arr(int n){

   int array[n];

}

int main(){

   make_arr(10);

}

但是,在C ++标准(直到C ++ 11)中,没有可变长度数组的概念。根据C ++ 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名称:" << e->emp_name << endl;

   cout << "名称长度:" << 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名称:Jayanta Das

名称长度:11

Allocated:23

---------------------------------------

Emp ID:201

Emp名称:Tushar Dey

名称长度:10

Allocated:22

---------------------------------------

Size of student: 12

Size of student pointer: 8

以上是 C和C ++中的可变长度数组 的全部内容, 来源链接: utcz.com/z/351534.html

回到顶部