C++ 数组作为参数,变量混淆

C++ 数组作为参数,变量混淆,c++,arrays,parameter-passing,C++,Arrays,Parameter Passing,好的,所以我得到了一些非常离题的答案,所以我想我会编辑这篇文章,并添加教科书中的注释,以清晰明了: 有时,数组中的元素数可能小于数组的大小。例如,存储学生数据的数组中的元素数可能会随着学生减少或增加课程而增加或减少。在这种情况下,我们只希望处理数组中包含实际数据的组件。为了编写一个函数来处理这样的数组,除了将数组声明为形式参数外,我们还声明了另一个形式参数,用于指定数组中元素的数量,如下函数所示: void initialize(int list[], int listSize) { int

好的,所以我得到了一些非常离题的答案,所以我想我会编辑这篇文章,并添加教科书中的注释,以清晰明了:

有时,数组中的元素数可能小于数组的大小。例如,存储学生数据的数组中的元素数可能会随着学生减少或增加课程而增加或减少。在这种情况下,我们只希望处理数组中包含实际数据的组件。为了编写一个函数来处理这样的数组,除了将数组声明为形式参数外,我们还声明了另一个形式参数,用于指定数组中元素的数量,如下函数所示:

void initialize(int list[], int listSize)
{
int count;
for (count = 0; count < listSize; count++)
list[count] = 0;
}
void初始化(int list[],int listSize)
{
整数计数;
对于(计数=0;计数
函数initialize的第一个参数是任意大小的int数组。调用函数initialize时,实际数组的大小作为函数initialize的第二个参数传递


好的,现在我发布了整个示例,其中有教科书上的注释,我的困惑是为什么他们将数组设置为零。这些注释给我的印象是,这个函数允许用户使用他们想要的任何大小的数组,因为大小被设置为零(我在这里猜测),这允许用户选择他们想要的任何大小的数组?它每次都会重置为零,因此如果下次需要更多或更少的单位,它将默认为零,以便您可以再次填充它?

它正在执行它所说的操作,它正在初始化。在这种情况下,该方法只是将
列表的每个元素设置为
0
。如果添加大括号,可能会更清楚:

for (count = 0; count < listSize; count++)
{
  list[count] = 0;
}
for(count=0;count
因此,根据您更新的帖子
,本书的描述是:1)您可能不想处理整个数组,因为其中只有一部分可能有有效数据2)为了编写函数来处理以这种方式运行的数组,处理这些数组的函数不仅必须将数组作为参数,还必须将有效元素的数目作为参数。3) 我们将提供一个示例函数
initialize
,它遵循我们刚才描述的规则
,但是
文本中没有任何内容真正说明
initialize
的最终结果


我上面的描述以及其他帖子都对
initialize

进行了准确的描述,它在做它所说的事情,它在初始化。在这种情况下,该方法只是将
列表的每个元素设置为
0
。如果添加大括号,可能会更清楚:

for (count = 0; count < listSize; count++)
{
  list[count] = 0;
}
for(count=0;count
因此,根据您更新的帖子
,本书的描述是:1)您可能不想处理整个数组,因为其中只有一部分可能有有效数据2)为了编写函数来处理以这种方式运行的数组,处理这些数组的函数不仅必须将数组作为参数,还必须将有效元素的数目作为参数。3) 我们将提供一个示例函数
initialize
,它遵循我们刚才描述的规则
,但是
文本中没有任何内容真正说明
initialize
的最终结果

我的上述描述以及其他帖子提供了对
初始化

的准确描述,如果您谈论的是“计数=0”,那么: 更常见的语法是: 对于(int blah=0;blah 但是没有理由在for()语句中声明“blah”:

int blah;
for(blah = 0; blah < max; blah++)
一般来说:

因为你正在使用C++,你通常(90%的时间)使用STD::vector更好。数组相当奇怪,因为它们非常类似于指向内存块的指针,不能像正则变量那样处理。std::vector除了有许多其他好处外,还包装了数组,这样您就可以将其作为正则变量处理(因为vector就是一个)。

如果您说的是“count=0”,那么: 更常见的语法是: 对于(int blah=0;blah 但是没有理由在for()语句中声明“blah”:

int blah;
for(blah = 0; blah < max; blah++)
一般来说:

因为你正在使用C++,你通常(90%的时间)使用STD::vector更好。数组相当奇怪,因为它们非常类似于指向内存块的指针,不能像正则变量那样处理。std::vector除了有许多其他好处外,还包装了数组,这样你就可以把它当作一个正则变量来对待(因为vector就是一个)。

你说:

我知道函数initialize用于确定 通过将数组的值传递给listsize来创建数组列表

不,不是真的。此函数不是用来确定某些内容,而是用来初始化所有数组(直到listsize索引,顺便说一句:这可能很危险,因为您可以通过0传递大于此列表大小的listsize)

通过将数组的值传递给listsize

不!listsize在这里不是元素的值,而是数组大小,请看“for”循环@Jason xD。 您是否尝试在具有某些列表大小的数组上调用此函数?

您说:

我知道函数initialize用于确定 通过将数组的值传递给listsize来创建数组列表

不,不是真的。此函数不是用来确定某些内容,而是用来初始化所有数组(直到listsize索引,顺便说一句:这可能很危险,因为您可以通过0传递大于此列表大小的listsize)

通过将数组的值传递给listsize

不!listsize在这里不是元素的值,而是数组大小,请看“for”循环@Jason xD。
您是否尝试在具有某些列表大小的数组上调用此函数?

如果您的代码格式正确
std::vector< std::pair<std::string, int> >::iterator myIterator = myVector.begin();
for( ; myIterator != myVector.end(); myIterator++)
int myArray[10]; //10 integers in a block of memory.

myArray[0] = 5; //Accessing the first element in the block of memory.
myArray[3] = 17; //Accessing the fourth element in the block of memory.
memset(list, 0, sizeof(int)*listSize);