所以我和我的朋友聊天,帮她写了一段代码,我总是认为数组需要是编译时常量,因为它们在堆栈上。但她说她的朋友是用下面的代码做的:
#include <iostream.h>
#include <stdlib.h>
int main()
{
int value = ' ' ;
int sum = 0;
int count = 0;
cout<<"Please enter the total number of employees" <<endl;;
cin>> valu
我为C& C++尝试了相同的程序,即将2D数组传递给函数。下面的程序在C语言中工作,但在C++中不工作,请解释为什么?
在C中
#include<stdio.h>
void pass(int n, int arr[][n]) // or void pass(int n, int (*arr)[n])
{
printf("%d",arr[0][0]);
//.....
}
int main()
{
int n;
scanf("%d",&n);
int arr[n][n];
arr[0][0]=0;
pass(n,arr);
r
为什么要这么做?
#include <iostream>
int main()
{
std::cout << "Enter a number: ";
int arraySize;
std::cin >> arraySize;
int array[arraySize];
for(int element : array)
{
element = 42;
std::co
我是C++的新手,我在学校的电脑上练习编码,所以我必须使用在线编译器(www.CompileOnline.com)。我有一个由函数定义的变量,然后用于初始化数组,如下所示:
int var =函数(A);
国际货币基金组织;
该代码在网站上运行良好,但在2012上给出了一个错误:
C2057:期望常数表达式
这是Visual的问题吗?我读过这是一个C++规则,但为什么它在网站上工作呢?任何帮助都是非常感谢的,谢谢。
我对C中的数组声明有点困惑,我知道可以这样做:
int a[20]; // Reserved space for 20 int array
int b[] = {32, 431, 10, 42}; // Length in square brackets is auto-calculated
int *c = calloc(15, sizeof(int)); // Created a pointer to the dynamic int array
但这样做有可能吗?
int my_array[sizeof(int) * 5];
它是一个有效的代码,还是数组长度应该是一个常量表达式(在A
#include <stdio.h>
#include <stdlib.h>
const int N = 5;
int main()
{
int vett[N] = {1, 2, 3, 4, 5};
return 0;
}
代码的这一部分有什么问题?编译器向我报告这些错误和警告:
error: variable-sized object may not be initialized
warning: excess elements in array initializer [enabled by default]
warning: (near ini
以下代码在vs2010(Win32控制台应用程序模板)中编译错误。我怎么才能修好它。
unsigned long long int Fibonacci[numFibs]; // error occurred here
错误C2057:期望常量表达式
错误C2466:无法分配大小为0的数组
错误C2133:“Fibonacci”:未知大小
完整的代码附加了(这是c -3E书中编程的示例代码)。无任何修改)
int main()
{
int i, numFibs;
printf("How may Fibonacci numbers do you want (between 1 to
我知道如果你有一个2D数组array[i][j],那么j必须声明,并且你不能得到第二个作为用户输入的数组。有没有办法同时获得二维数组的长度和高度作为变量? cin>>i;
cin>>j;
int array[i][j]; 我尝试向用户请求两个变量,并将它们设置为数组height和length,但都不起作用。 #include<iostream>
using namespace std;
int a;
int b;
cin>>a;
cin>>b;
int array[a][b];
在windows MSVC中,我试图编译以下代码。 void foo(std::vector<double> &bar){
const long int length = bar.size();
double a[length]; //error C3863: array type 'double [length]' is not assignable
for(int i=0; i < length; i++){
a[i]=0.0;
}
//do some other things
} 代码在x
在C编程中,我遇到了一种情况:我意外地初始化了一个大小可变的数组,并且它起了作用。我做了一些研究,显然可变长度数组可以从C99编译中获得。显然,GCC 4.8.2的默认编译选项是C98。
下面是我用来测试的代码:
#include "stdio.h"
#include "stdlib.h" // rand(), srand()
#include "time.h"
void printArray(const char* c) {
// impossible to get size of c because it returns point
有两种方法可以将内存分配给数组,其中的大小在开始时是未知的。最常见的方法是像这样使用malloc
int * array;
... // when we know the size
array = malloc(size*sizeof(int));
但是在C99中,在我们知道大小之后定义数组也是有效的。
... // when we know the size
int array[size];
他们的和完全一样吗?
当我使用学习C时,它不允许我创建一个非恒定大小的数组。我要么放一个像int arr[5];这样的值,要么做#define size 5和int arr[size];。然而,今天使用Clion,我注意到它允许我做以下工作:
#include <stdio.h>
int main()
{
printf("Enter a value: ");
int x;
scanf("%d", &x);
int arr2[x];
for (int i = 0; i < x; i++)
{
可能重复:
这是常量大小为4的简单数组的定义,它存储在堆栈内存中:
int array[4];
现在,如果我想在堆栈中声明动态大小的数组,似乎应该编写以下代码:
int n;
cin >> n;
int array[n];
但是,正如我们所知道的,这在C++中是不允许的,我们可以编写这个,它将在动态内存(即堆)中创建数组:
int n;
cin >> n;
int *array = new int[n];
但是这要慢得多,而且(因为使用了新的运算符),需要在我们完成数组的工作之后调用delete []操作符。
所以我的问题是:
为什么C++不允许在堆栈内存中创建动
我以为我理解VLA是什么,直到我在这里看到一个关于动态内存分配与可变长度数组之间的区别的问题。因此,我在动态内存分配方面没有任何问题,至少目前是这样,但我不理解的是,为什么这段代码被认为是VLA:
int size = 10; // or whatever
int my_array [size] ; // why this is a VLA
更神秘的是,这甚至被认为是VLA。
const int size = 10;
int my_array [size]; // why even when i use a const it is a VLA .
所以,我的问题是,这两种不同的方法是如何被认
我读到了关于在C中动态创建数组的内容,所以正确的方法如下所述:
int n;
scanf("%d", &n);
int *arr = (int*)malloc(n*sizeof(int));
但我想如果我能做这样的事-
int n, i, sum=0;
scanf("%d", &n);
int arr[n];
我编译并运行它,没有任何错误。所以,我的问题是为什么我要使用malloc()?这与旧的和新的C版本有关吗?
#include <stdio.h>
#include <stdlib.h>
#pragma warning (disable : 4996)
void main() {
int matrix[30][50];
int sizeRow, sizeCol;
printf("Number of Rows in your table : ");
scanf("%d", &sizeRow);
printf("Number of Columns in your table :
我在这方面看到了一个问题,但我并没有真正理解它,因为我在学校还没有学到指针/记忆,这是学校的作业。我正在编写一个程序,它从用户那里获取一个整数值,并打印出一个具有相同腿长的上直角三角形。我使用一个数组,然后根据每个单元格的坐标来存储一个字符。当我编译它时,它运行得很好,但是它不适用于我的提交。有人能解释一下为什么我会在标题中出现错误吗?
#include <iostream>
#include <string>
using namespace std;
int main()
{
int size, m, n;
正如我们所知道的,我们可以使用int (*p)[10]来定义一个指向int10数组的指针,所以如果我们有p=0和sizeof(int)==4,p+1将是0+10*4 = 40,这是可行的,因为编译器在编译时知道p是什么。
如果我们这样做会怎么样:
int main()
{
int sz = 10;
int (*p)[sz];
}
换句话说,直到程序在那里运行,才会有人知道sz。我以为这不会起作用,但它确实起作用了..
所以我的问题是,它是如何工作的?我的意思是,在c中有没有地方可以在运行时存储值的类型?如果不是,这是如何工作的?这只是编译器相关的吗?
我正在使用gcc vers
我试图理解,当在编译时在堆栈上创建一个未知大小的数组时会发生什么。让我们考虑一下这段代码:
int main()
{
int x;
cin >> x;
int tab[x];
}
我发现了很多关于这个说法的信息,你不能在堆栈上创建一个未知大小的数组,但是我没有找到任何信息为什么C++编译器允许它,或者其中一些允许它?当创建这样的数组时会发生什么?它是在堆栈上创建的还是已经在堆上创建的?
GCC编译器是否有一些选项可以打开,因为这样的结构会被认为是错误,或者至少是警告?
我知道你不应该用一个变量作为ex的大小来声明数组。int arr[n];,因为如果不使用动态内存,数组的大小应该是静态的,但是如果你有一个这样的函数呢?这是有效的还是无效的?它看起来运行得很好..它是在一个函数中声明的,这与它有什么关系吗?
int main() {
int n;
scanf("%d", &n);
exampleFunc(n);
}
void exampleFunc(int const n) {
int arr[n];
for (int i = 0; i < num; i++) {
arr[i] = i + 1;