c++ - 数组的行为不符合我的预期

标签 c++ arrays pointers function-pointers

指针仍然让我有些困惑。我希望split函数将数组的负元素复制到一个新数组中,并将正元素复制到另一个新数组中。一个不同的函数打印变量。我已经包含了该功能,但我不认为这是问题所在。打印数组时,所有元素均为0:

Enter number of elements: 5   
Enter list:1 -1 2 -2 3
Negative elements:
0 0 
Non-Negative elements:
0 0 0 

我认为问题是在下面的split函数中,我需要以不同的方式传递参数。我尝试使用“*”和“**”(不带引号)来传递参数,但收到错误消息,我这样做可能不正确。
void split(int alpha[], int bravo[], int charlie[], int aSize, int bSize, int cSize) {
  int a = 0;
  int b = 0;  
for (int i = 0; i < aSize; ++i) {
  if (alpha[i] < 0) {
    alpha[i] = bravo[a];
    ++a;
  }
  else {
    alpha[i] = charlie[b];
    ++b;
  }   
}
 if (a + b != aSize) {
   cout << "SOMETHING HAS GONE HORRIBLY WRONG!";
   exit(0);
 }
}

我的主要功能(所有数组都必须是指针):
int num_elements;
  cin >> num_elements;
  int * arr1 = new int[num_elements];
  int x;
  cout << "Enter list:";
  for (int i = 0; i < num_elements; ++i) {
    cin >> x;
    arr1[i] = x;
  }
  int y = 0;
  int z = 0;
  count(arr1, num_elements, y, z);
  int * negs = new int [y];
  int * nonNegs = new int[z];
  split(arr1, negs, nonNegs, num_elements, y, z);
  cout << "Negative elements:" << endl;
  print_array(negs, y);
  cout << endl;
  cout << "Non-Negative elements:" << endl;
  print_array(nonNegs, z);
  cout << endl;

所有功能:
void count(int A[], int size, int & negatives, int & nonNegatives) {
  for (int i = 0; i < size; ++i) {
    if (A[i] < 0) {
     ++negatives;
    } 
    if (A[i] >= 0) {
     ++nonNegatives;
    }
  }
}

void split(int alpha[], int bravo[], int charlie[], int aSize, int bSize, int cSize) {
  int a = 0;
  int b = 0;  
for (int i = 0; i < aSize; ++i) {
  if (alpha[i] < 0) {
    alpha[i] = bravo[a];
    ++a;
  }
  else {
    alpha[i] = charlie[b];
    ++b;
  }   
}
 if (a + b != aSize) {
   cout << "SOMETHING HAS GONE HORRIBLY WRONG!";
   exit(0);
 }
}


void print_array(int A[], int size) {
  for (int i = 0; i < size; ++i) {
      cout << A[i] << " ";
  }
}

感谢所有帮助。

编辑:我为我不清楚的问题表示歉意,我想知道如何让我的数组表现出我想要的行为。

最佳答案

数组按照:)的方式正确运行,您在split函数中犯了小错误(可能被忽略)。我已注释掉该语句并给出了问题原因,请更正这两行代码,其余都可以。

void split(int alpha[], int bravo[], int charlie[], int aSize, int bSize, int cSize) {
  int a = 0;
  int b = 0;  
for (int i = 0; i < aSize; ++i) {
  if (alpha[i] < 0) {
    //alpha[i] = bravo[a];// here alpha is your source array, don't overwrite it
    bravo[a] = alpha[i];
    ++a;
  }
  else {
    //alpha[i] = charlie[b];// here alpha is your source array, don't overwrite it
    charlie[b] = alpha[i];
    ++b;
  }   
}
 if (a + b != aSize) {
   cout << "SOMETHING HAS GONE HORRIBLY WRONG!";
   exit(0);
 }
}

关于c++ - 数组的行为不符合我的预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58871245/

相关文章:

c - typedef 在 C 中存储指针

c++ - 将 vector 迭代器存储在另一个 vector 中

c++ - 使用 boost::math::ibeta 时出错

arrays - 将循环缓冲区移位/对齐/旋转到原地零

C函数返回连接的字符串

pointers - golang return [] * TreeNode {}和return [] * TreeNode {nil}有什么区别

c++ - 如何解决错误 MSB6006 : "cmd.exe" exited with code 3?

c++ - 需要替换模板<class Stepper>

c - 结构中的二维数组

java - 如何在 Java Switch Case Value 中添加字符串数组项?