在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;
}
上面这个程序是一个带整数(数字)数组的程序,而在字符数组中我们可以指定字符数组元素的任何值吗?
答案 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];
}
a[0]
仍为空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];
将精确存储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到4索引a
。这意味着a
必须至少包含5个元素;它目前定义为长度为3。
#include <iostream.h>
应该只是#include <iostream>
。 <iostream.h>
已经过标准且已过时。
C ++数组索引是基于0的,所以虽然从技术上讲不是错误,但是你忽略了数组的第一个元素。您应该将for
循环标记为for (int i = 0; i < 4; ++i)