C++ C++;不以0开头的循环

C++ C++;不以0开头的循环,c++,arrays,loops,C++,Arrays,Loops,所以,我一直在尝试创建一个简单的程序,它只需要一个空数组和一个大小,然后用从1到指定数字的数字填充它 #include <iostream> using namespace std; int* fill(int empty[], int size) { int i; for (i = 1; i < size; i++) { empty[i] = i; } return empty; } int main() { int

所以,我一直在尝试创建一个简单的程序,它只需要一个空数组和一个大小,然后用从1到指定数字的数字填充它

#include <iostream>
using namespace std;

int* fill(int empty[], int size) {
    int i;
    for (i = 1; i < size; i++) {
        empty[i] = i;
    }
    return empty;
}

int main() {
    int size;
    cin >> size;
    int* empty = new int[size];
    fill(empty, size); 
    for (int i = 0; i < size; i++) {
        cout << empty[i] << endl;
    }
    return 0;
}
注意它是如何用一个奇怪的负数替换0的吗?这是当我输入“30”作为数组大小时

当我将i的值设置为0时,它只是将负数替换为0。 有没有办法在一点启动阵列


谢谢。< /P> < P>如果数组中的数字开始循环从0开始(因为C++中的数组是零),只需将值设置为<代码> I+ 1 < /C> >而不是简单地<代码> i>代码>:/p>

int* fill(int empty[], int size) {
    int i;
    for (i = 0; i < size; i++) {
        empty[i] = i + 1;
    }
   return empty;
}
int*填充(int-empty[],int-size){
int i;
对于(i=0;i
您应该知道数组的下标从
0
开始,到
size-1
。例如:

int a[10];  // The subscript is from a[0] to a[9]
如果您想要一个大小为
sz
且下标从
1
开始的数组,您可以这样做

constexpr int sz = 10;
int a[sz + 1];

然后,只需使用从
1
sz
的下标范围,并忽略
0

从索引1开始填充数组,然后从索引0开始输出。你期待什么

有没有办法在一点启动阵列

对。如果您需要
size
元素,并且出于任何原因需要从索引1开始,那么您可以分配一个额外的元素:

现在,在所有后续操作中忽略元素0*。您还可以迭代到并包括
size

for (i = 1; i <= size; i++) {
    empty[i] = i;
}
那怎么办

int* fill(int empty[], int size) {
    int i;
    for (i = 0; i < size; i++) {
        empty[i] = i + 1; // one more than the index
    }
    return empty;
}
int*填充(int-empty[],int-size){
int i;
对于(i=0;i

您需要将该值设置为比数组索引多一个。因此,数组索引从
0-size-1
开始计数,而值(
i+1
)从
1-size
开始计数

empty[0]
只是未初始化。
for(i=1;i如果从填充数组开始,从1开始,打印时也应该从1开始。C/C++中的第一个索引总是0。无论如何,最好还是从0开始数组。我不会否决这个问题。当使用基于索引的数组时,你应该小心。考虑是否可以使用其他数据S。根据问题:当fill()方法中的int i为0时,它工作得非常好,但我想从1开始计算数字。您的回答是如何解决的?OP想从1开始数组中的数字-数组是基于零的(通常)-所以解决方法就是简单地将元素设置为
i+1
啊,我没有看到。你应该更新答案来解释你在做什么以及它是如何解决问题的。我认为他想从
1
开始填充数组的是数字,而不是数组索引。是的,我意识到了这一点并编辑了我的答案。我可以选择数组-我想是把东西索引出来了。
for (i = 1; i <= size; i++) {
    empty[i] = i;
}
std::iota( empty, empty + size, 1 );
int* fill(int empty[], int size) {
    int i;
    for (i = 0; i < size; i++) {
        empty[i] = i + 1; // one more than the index
    }
    return empty;
}