C语言动态分配数组,栈可以动态分配吗

  C语言动态分配数组,栈可以动态分配吗

  结构A {}

  结构B { A a}

  结构C { A a}

  A*[]结构;

  电子商务

  init(b);

  structs ~=cast(a*)b;错误:复制铸造(A*) b到分配内存中会逃逸b局部变量引用

  排气量

  init(c);

  structs ~=cast(a*)c;

  批处理进程(结构);//最后错误:复制铸造c到分配内存中会逃逸c局部变量引用

  这样:cast(A*) b.a?

  如果确实想把对象放置在堆中。动态数组提供乔治勋章拥有的内存。

  以下程序交替把乙和丙放入缓冲区,然后批处理:

  struct A { int I;}

  结构B { A a}

  结构C { A a}

  A*[]结构;

  空的追加(T,参数.)(ref ubyte[] structs,Args args) {

  进口标准转换:安置;

  structs.length=sizeWithPadding!t;

  auto where=cast(T *)(structs[$-size with padding!t]);

  炮位(其中,args);

  }

  void main() {

  ubyte[]结构;

  foreach(I;0 .10) {

  如果(i % 2) {

  structs.append!b(a);

  }否则{

  structs.append!c(A(I));

  }

  }

  批处理进程(结构);

  }

  自动处理(T)(常量(字节)[]结构){

  导入标准。stdio:writeln;

  writeln(* cast(T *)结构。ptr);

  返回结构【sizeWithPadding!T.$];

  }

  void batch _ process(const(ubyte)[]structs){

  导入标准范围:空;

  for(size _ t I=0;structs.emptyi ) {

  如果(i % 2) {

  structs=structs.process!b();

  }否则{

  structs=structs.process!c();

  }

  }

  }

  T * nextAlignedAddress(T)(T * candidateAddr){

  导入标准特征;

  静态if (is (T==class)) {

  const alignment=类实例对齐!t;

  }否则{

  const alignment=T.alignof

  }

  const result=(cast(size _ t)candidateAddr alignment-1)

  /对齐*对齐;

  返回转换(T*)结果;

  }

  void * nextAlignedAddress(T)(void * candidateAddr){

  返回nextAlignedAddress(cast(T *)candidateAddr);

  }

  size_t sizeWithPadding(T)() {

  静态if (is (T==class)) {

  const candidateAddr=_ _ traits(classInstanceSize,T);

  }否则{

  const candidateAddr=T.sizeof

  }

  返回cast(size _ T)nexalignedaddress(cast(T *)candidateAddr);

  }从这里复制了nextAlignedAddress和sizeWithPadding函数。

  我知道,垃集分配动态数组且禁止在垃集内存中保存局部变量引用,但是这里假设结构不会逃逸,可用固定大小数组实现:

  A*[32]结构;

  int I=0;

  structs[I]=cast(a*)b;但是我想知道是否有具有最大容量限制可像普通动态数组一样连接的栈分配数组.

  类似:

  假设越狱者或其他人!

  动态数组结构;

  structs ~=cast(a*)b;这就是@可信的目的。也是为什么应小心使用它,并尽量最小化代码。

  结构A {}

  结构B { A a}

  结构C { A a}

  void main()

  {

  A*[]结构;

  电子商务

  排气量

  ()@可信{

  structs ~=cast(a*)b;

  structs ~=cast(a*)c;

  } ();

  }这是我要的,但为何

  void func()@可信

  {

  A*[]结构;

  电子商务

  structs ~=cast(a*)b;//仍然错误

  }不工作呢?

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: