如果我们声明一个包含四个元素的数组,这些元素可以存储值吗?

时间:2013-02-12 11:08:12

标签: c++ c

在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;
}

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

3 个答案:

答案 0 :(得分:3)

Array是相同类型值的占位符,不是。在阵列声明期间保留了地方。

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个索引不保留。
  3. 您可以按照以下方式更正:

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

    你的另一个问题:

      

    虽然在字符数组中我们可以指定字符数组元素的任何值

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

    char c[3];
    

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

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

  2. #include <iostream.h>应该只是#include <iostream><iostream.h>已经过标准且已过时。

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