C ++数组操作

时间:2018-01-20 10:56:36

标签: c++

我想从程序中将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;
}

4 个答案:

答案 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;
}

enter image description here

答案 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