-4

在 C++ 中,如果我们声明一个包含四个元素的数组,这些元素可以存储值吗?我的意思是,如果我们声明以下数组:

#include <iostream>
int main()
{
    int a[4];
    double res;
    double avg;
    avg = res = 0.0; 
    for(int i=0; i<4; i++)
    {
        cout<<"Please enter age ";
        cin>> a[i];
    }

    for(int i=0; i<4; i++)
    {
        cout<< "You have entered these ages " <<a[i];
        cout<<endl;
        res += a[i];
    }

    avg = res/4;
    cout<< "Total is "<<res <<endl;
    cout<< "Avg is "<<avg;
}

上面的这个程序是一个带有整数(数字)数组的程序,而在字符数组中我们可以为字符数组的元素赋值吗?

4

3 回答 3

3

是的。

Array 是相同类型和 no 值的占位符。在数组声明期间保留的位置。

int a[3];

意味着它可以存储3个整数。被访问为a[0],a[1]a[2].

现在,您可以看到循环中的问题:

for(int i=1; i<=4; i++)
{
    cout<<"Please enter age ";
    cin>> a[i];
}
  1. a[0]仍然是空的
  2. 循环运行 4 次:a[1], a[2], a[3], a[4]并且,最后 2 个索引未被保留。

您可以按以下方式更正它:

for(int i=0; i<3; i++)
{
    cout<<"Please enter age ";
    cin>> a[i];
}

你的另一个问题:

而在字符数组中,我们可以分配字符数组元素的任何值

不,每个索引都将存储一个char

char c[3];

将准确存储 3char秒。如果您尝试使用其他索引,可能会导致未定义的行为、分段错误。当您尝试访问未分配给您的进程的内存时。

于 2013-02-12T11:14:26.070 回答
0

是的,声明的元素可用于存储值。

但是,在您的示例中,您只声明了一个 3 元素数组,它为您提供数组元素a[0], a[1],a[2]. 您正在访问数组元素a[1], a[2], a[3], a[4],导致超出范围的情况。

于 2013-02-12T11:13:59.337 回答
0

如果您要问是否可以为数组的元素赋值,那么答案是肯定的。以下所有内容都是完全有效的:

char a[10];
a[4] = 'x';
std::cin >> a[6];

但是请注意,您的代码包含错误:

  1. a使用索引 1 到 4 进行索引。这意味着a必须至少有 5 个元素长;它目前定义为长度为 3。

  2. #include <iostream.h>应该只是#include <iostream><iostream.h>是预标准和过时的。

  3. C++ 数组索引是基于 0 的,因此虽然从技术上讲不是错误,但您忽略了数组的第一个元素。您可能应该将for循环表述为for (int i = 0; i < 4; ++i)

于 2013-02-12T11:15:25.130 回答