相关疑难解决方法(0)

允许运行时没有动态分配的数组大小?

我已经使用C++几年了,今天我看到了一些代码,但这怎么能完全合法呢?

int main(int argc, char **argv)
{
    size_t size;
    cin >> size;
    int array[size];
    for(size_t i = 0; i < size; i++)
    {
        array[i] = i;
        cout << i << endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据海湾合作委员会编制.

如何在没有new或没有运行时确定大小malloc

只是为了仔细检查,我用谷歌搜索了一些和我的所有类似的代码声称存储大小错误.

甚至Deitel的C++如何编程p.共同编程错误4.5下的261个状态:

只有常量可用于声明自动和静态数组的大小.

给我看.

c c++ array-initialization

58
推荐指数
4
解决办法
4万
查看次数

如果我可以创建一个数组,为什么还需要动态内存分配?

我正在阅读有关动态内存分配和静态内存分配的内容,并找到了有关动态内存分配的内容:

在前面章节中看到的程序中,通过定义所需的变量,在程序执行之前确定所有内存需求.但是可能存在程序的内存需求只能在运行时确定的情况.例如,当需要的内存取决于用户输入.

所以我用C++编写了以下程序:

#include <iostream>

int main()
{
  int n = 0;
  int i = 0;

  std::cout << "Enter size: ";
  std::cin >> n;
  int vector[n];

  for (i=0; i<n; i++)
  {
    vector[i] = i;
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个程序有效.我不明白它是如何工作的.什么时候确定尺寸?在这种情况下如何分配向量?

c++ variable-length-array static-memory-allocation

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

非恒定大小的数组:为什么这甚至可以工作?

#include <iostream>
using namespace std;

int main(){
    int n;
    cout<<"Enter the size :";
    cin>>n;
    int array[n];  // I've worked some outputs and it works 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是某种动态分配吗?
为什么它甚至没有给'n'作为"const"的错误?

此外,写入cout << array[n+5];不会导致编译时或运行时错误.

我正在使用Dev-C++.

c++ memory arrays compiler-errors dynamic

5
推荐指数
1
解决办法
194
查看次数

数组声明中的常量表达式

C++ Primer

必须在编译时知道数组维度,这意味着维度必须是常量表达式

另外一点是这样的

unsigned count = 42;           // not a constant expression
constexpr unsigned size = 42;  // a constant expression
Run Code Online (Sandbox Code Playgroud)

我会,然后期望以下声明失败

a[count];                      // Is an error according to Primer
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.编译并运行良好.

还有一点奇怪的是,++count;在数组声明之后也没有引起任何问题.

-std=c++11flag打开的程序g++4.71

这是为什么?

c++ arrays constexpr

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

C++,数组大小必须是const表达式

我正在阅读Lappman的"C++ Primer"一书.在第113页它说

数组中元素的数量是数组类型的一部分.因此,必须在编译时知道维度,这意味着维度必须是常量表达式.

此外,它说我们不能做这样的事情

unsigned cnt  = 43; //not an const expression
string bad[cnt]; // error
Run Code Online (Sandbox Code Playgroud)

但事实并非如此,我编译它没有任何问题,我甚至可以做到这样的事情

int i;
cin >> i;
get_size(i);

void get_size(int size) {
  int arr[size];
  cout << sizeof (arr);
}
Run Code Online (Sandbox Code Playgroud)

它运行良好,为什么每本书都说在编译时必须知道数组大小?或者它必须是const表达式?

c++ arrays

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

琐碎的C++代码......为什么要编译?

这样的 C++教程说,所有数组的大小必须在程序运行之前确定.例如,这是不允许的:

cout << "How many variables do you want? ";
int nVars;
cin >> nVars;

int anArray[nVars]; // wrong!  The size of the array must be a constant
Run Code Online (Sandbox Code Playgroud)

但这个简单的程序确实可以编译和执行.应该吗?

c++ arrays

2
推荐指数
1
解决办法
416
查看次数

运行时const来定义数组大小

可能重复:
C/C++:运行时的数组大小是否允许动态分配?

在下面的清单中,显然大小buf由运行时常量决定j.编译器如何生成代码以在堆栈上分配存储(不知道j编译时的值)?

#include<iostream>
#include<cstdlib>

using namespace std;

int main(){
  srandom(time(NULL));    
  int i = random();
  cout<< "random number: "<<i<<endl;
  if(i%2==0)
    i=2;
  else
    i=1;
  const int j=i;
  char buf[j];
  std::cout<<"size of buf array: "<<sizeof(buf)<<endl;
  return 0;   
}
Run Code Online (Sandbox Code Playgroud)

c++

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