数组初始化函数:将数组作为指针传递:C ++

时间:2016-04-09 04:14:11

标签: c++ arrays function pointers

我正在尝试通过将数组作为指针传递给初始化函数来初始化数组。我的程序编译时没有错误,但是当我运行它时;它打印出字符计数并停止。

这是我到目前为止所做的:

#include<iostream>
#include<cctype>
#include<string>
#include<iomanip>

using namespace std;

void initialize(int *array, int n, int value);    

int main()
{
 char ch;
 int punctuation, whitespace, digit[10], alpha[26]; 

 punctuation = 0, whitespace = 0;

initialize(digit, sizeof(digit)/sizeof(int), 0);
initialize(alpha, sizeof(alpha)/sizeof(int), 0);

while(cin.get(ch))
{
    if(ispunct(ch))
        ++punctuation;
    else if(isspace(ch))
        ++whitespace;
    else if(isdigit(ch))
        ++digit[ch - '0'];
    else if(isalpha(ch))
    {
        ch = toupper(ch);
        ++alpha[ch - 'A'];
    }

    if(whitespace > 0)
    {
        cout << "Whitespace = " << whitespace << endl;
    }

    if(punctuation > 0)
    {
        cout << "Punctuation = " << punctuation << endl;
    }

    cout << setfill('-') << setw(17) << '-' << setfill(' ') << endl;
    cout << " Character " << " Count " << endl;
    cout << setfill('-') << setw(17) << '-' << setfill(' ') << endl;


    return 0;
 }
}

void initialize(int *array, int n, int value)
{
  int i;    

  for (i = 0; i < n; ++i)
  {
     value += array[i];
  }
}

我不确定我在这里做错了什么。虽然,我对它们被传递给另一个函数后指针如何工作有点困惑。有人可以解释一下吗?

谢谢

2 个答案:

答案 0 :(得分:2)

你可能想要
一个)

void initialize(int *array, int n, int value)
{
  int i;    

  for (i = 0; i < n; ++i)
  {
     // no: value += array[i]; but:
     array[i] = value;
  }
}

另见std::fill

和b)将return 0;移离while-loop-body

    cout << " Character " << " Count " << endl;
    cout << setfill('-') << setw(17) << '-' << setfill(' ') << endl;
  }
  return 0;
}

编辑:关于a)
你可以使用

std::fill(std::begin(digit), std::end(digit), 0);
std::fill(std::begin(alpha), std::end(alpha), 0);

而不是你的initialize()函数或(给定上下文)只是

int punctuation, whitespace, digit[10]={0}, alpha[26]={0}; 

答案 1 :(得分:0)

如果您使用C ++进行开发,为什么不使用向量呢? (使用数组*非常C风格)。

vector<int> array(n, value);

n =整数。 value =要放置在每个数组单元格中的值。