我想从程序中将3添加到大于3的元素并打印它们。我花了很多时间才能看到结果。另外,当我直接在循环中将n更改为8时,它会给出结果;但是,它与我想要的无关。我该如何更正此代码并改进它?
#include <iostream>
using namespace std;
int main()
{
int a[8] = {-5, 7, 1, 0, 3, 0, 5, -10};
int b[8];
int n= sizeof(a);
for( int i=1; i<=n; i++) {
if (a[i]>3) {
b[i] = a[i] + 3;
}
else {
b[i]= a[i];
}
}
for (int i = 1; i <= n; i++)
cout << b[i];
return 0;
}
答案 0 :(得分:1)
您的int n = sizeof(a);
不能按预期运行。
我想你想得到数组的大小(即8)。
但是你获得了元素的字节大小(例如32,整数大小,或者根据你的系统架构可能会有所不同)。
更改为int n = 8
,将解决您的问题。
另请注意,for( int i=1; i<=n; i++)
将获得“out of array”元素。
答案 1 :(得分:1)
sizeof()函数(int n = sizeof(a))给出32因为数组&#39; a&#39;包含8个元素&amp;每个元素都是&#39; int&#39;在内存中大小为4字节的类型,这就是为什么它在&#39; n&#39;中返回32变量。所以你必须除以&#39; n&#39;大小为整数。
其次,数组的索引以零&#39; 0&#39;开始。一个小于数组的长度,而不是数组的长度为1。
尝试以下代码!我也附上了代码的输出。
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int a[8] = { -5, 7, 1, 0, 3, 0, 5, -10 };
int b[8];
int n = sizeof(a)/sizeof(int);
for (int i = 0; i < n; i++) {
if (a[i]>3) {
b[i] = a[i] + 3;
}
else {
b[i] = a[i];
}
}
for (int i = 0; i < n; i++)
cout << b[i]<<endl;
return 0;
}
答案 2 :(得分:1)
程序中的语句int n = size(a)返回内存中占用的总字节数。即int占用4个字节,a是一个包含8个元素的数组,因此8X4 = 32。但是在使用循环访问数组元素时,你指定i&lt; = n meains i&lt; = 32但是只有8个元素,但是你试图访问32个元素,表示您尝试访问的元素超过8个。
执行以下代码
#include <iostream>
using namespace std;
int main()
{
int a[8] = {-5, 7, 1, 0, 3, 0, 5, -10};
int b[8];
int n=sizeof(a);
cout<<"\n Value of n is : "<<n;
return 0;
}
输出 n的值是:32
如果指定程序正确工作的数组大小的确切数量。
#include <iostream>
using namespace std;
int main()
{
int a[8] = {-5, 7, 1, 0, 6, 0, 8, -10};
int b[8];
for( int i=1; i<8; i++)
{
if (a[i]>3)
{
b[i] = a[i] + 3;
}
else
{
b[i]= a[i];
}
}
cout<<"\n Values in a array";
cout<<"\n -----------------\n";
for (int i = 1; i <8; i++)
cout << "\t"<<a[i];
cout<<"\n Values in b array";
cout<<"\n -----------------\n";
for (int i = 1; i <8; i++)
cout << "\t"<<b[i];
return 0;
}
输出
Values in a array
-----------------
7 1 0 6 0 8 -10
Values in b array
---------------
10 1 0 9 0 11 -10
我希望你理解这个概念。谢谢你
答案 3 :(得分:0)
Sizeof函数给出变量占用的内存总位的值 在数组中,它存储了8个整数值,每个值的大小为2bit,因此返回32