相关疑难解决方法(0)

GCC如何实现可变长度数组?

GCC如何实现可变长度数组(VLA)?这些数组是否基本上指向动态分配的存储,例如alloca返回的存储?

我能想到的另一个选择是,这样的数组被分配为函数中的最后一个变量,因此在编译时可以知道变量的偏移量.但是,在编译期间,第二个VLA的偏移量将再次不知道.

c arrays gcc

20
推荐指数
2
解决办法
5920
查看次数

C++表达式必须具有常量值

#include <iomanip>
#include <iostream>
#include <Windows.h>
using namespace std;

template <class T>
void sort(int n, T a[]){
       for(i=0;i<n-1;i++){
          for(j=i;j<n;j++){
               if(a[i] > a[j]){
               temp=a[i];
               a[i]=a[j];
               a[j]=temp;
               }
           }
     }
}


void main(){
    int size;
    cout<<" Please input the amount of numbers you would like to sort"<<endl;
    cin>>size;
    int Amta[size];
    for(int i=0; i<size; i++){
        cout<<"Please enter the "<<size+1<< "number";
        cin>>Amta[i];
    }
    Sleep(100000);
}
Run Code Online (Sandbox Code Playgroud)

我试图获取用户想要从用户输入的数量并将其存储在可变大小中.

但是当我初始化时,array Amta[size]我得到以下编译错误:

表达式必须具有恒定值

C2057:预期的常量表达式"编译错误.

c++ arrays const

6
推荐指数
1
解决办法
3万
查看次数

阵列存储发生了什么?

可能重复:
Stack中的动态数组?
编译器如何处理可变长度数组

我正在辅导的人编写了一些看起来像这样的代码,编译,运行正常,让我感觉像是一个完整的C++初学者:

int main(int argc, char** argv)
{
    int Index=0;
    cin>>Index;
    int Test_array[Index][Index];
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,我找到了我的答案,为什么这在这里工作:关于C中的数组

但是,我仍然对如何进行审讯.

我的意思是,代码块的堆栈大小应该提前知道吗?所以肯定,Test_array不能存储在堆栈中......

编译器是否在后台执行new/malloc-delete/free操作以使用堆内存作为数组?

在这种情况下,如果在堆上找不到足够的内存,这样的代码会抛出bad_alloc异常吗?

c++ arrays

4
推荐指数
1
解决办法
208
查看次数

为什么在C ++中使用可变长度数组是一个坏主意?

为什么在C ++中使用可变长度数组是一个坏主意?

因此,例如,此代码:

int i = 0;
std::cin >> i;

int array[i]; // bad?
Run Code Online (Sandbox Code Playgroud)

编辑:这不是重复项,因为重复项询问标准为何选择不将其放入的原因。此问题询问可变长度数组违反了哪些标准规则。

c++ language-lawyer

-4
推荐指数
1
解决办法
147
查看次数

标签 统计

arrays ×3

c++ ×3

c ×1

const ×1

gcc ×1

language-lawyer ×1