一个指针参数的例子
要在函数内给指针分配空间,则必须传递指针的地址,而不是指针存放的数据地址,因为我们要改变的是指针的
内容。其实原则就是要改变谁的内容就的将他的地址给别人。new操作其实作了两个操作,分配空间和改变指针的
内容。
#include <iostream>
#include <string>
using namespace std;
void separateOddsAndEvens(const int arr[], int size, int **odds, int * numOdds, int** evens, int* numEvens)
{
int i;
*numOdds = *numEvens = 0;
for(i =0; i< size; i++)
{
if(arr[i]%2==1)
(*numOdds)++;
else
(*numEvens)++;
}
*odds = new int[*numOdds];
*evens = new int[*numEvens];
int oddsPos = 0, evensPos = 0;
for(i = 0; i< size; i++)
{
if(arr[i]% 2 == 1)
(*odds)[oddsPos++] = arr[i];
else
(*evens)[evensPos++] = arr[i];
}
}
void separateOddsAndEvens2(const int arr[], int size, int *odds, int * numOdds, int* evens, int* numEvens)
{
int i;
*numOdds = *numEvens = 0;
for(i =0; i< size; i++)
{
if(arr[i]%2==1)
(*numOdds)++;
else
(*numEvens)++;
}
odds = new int[*numOdds];
evens = new int[*numEvens];
int oddsPos = 0, evensPos = 0;
for(i = 0; i< size; i++)
{
if(arr[i]% 2 == 1)
odds[oddsPos++] = arr[i];
else
evens[evensPos++] = arr[i];
}
}
int main(void)
{
int unSplit[10] = {1,2,3,4,5,6,7,8,9,10};
int *oddNums, *evenNums;
int numOdds, numEvens;
separateOddsAndEvens(unSplit, 10, &oddNums, &numOdds, &evenNums, &numEvens);
separateOddsAndEvens2(unSplit, 10, &oddNums, &numOdds, &evenNums, &numEvens); //错误,
for(int i=0; i < numEvens ; i++)
cout<< evenNums[i] << ",";
cout << endl;
for(int i=0; i < numOdds ; i++)
cout<< oddNums[i] << ",";
return 1;
}