传递指针数组并打印它们的问题

时间:2015-03-13 15:39:09

标签: c arrays

我遇到了一些非常简单的问题,即将数组作为指针传递给函数并返回它们。我以为我有指针,但我无法理解它。

以下是代码:

int* getLottoDraw();
void printArray(int * array);
int find_matches(int * array1, int * array2);


int main(int argc, char *argv[])
{
  int * lotteryDraw = getLottoDraw();

  printArray(lotteryDraw);

  system("PAUSE");  
  return 0;
}

int* getLottoDraw(){
 int draw[6];

 int i;
 srand(time(NULL));

 for (i = 0; i < 6; i++) {
     int r = rand() % 49;
     draw[i] = r;
 }
 return draw;
}

void printArray(int *array){
     int i;
     for (i = 0; i < 6; i++){
         printf("%i ", array[i]);
     }
}

一个示例输出是“3 2047 4614546 0 25 45”。不是希望的。

1 个答案:

答案 0 :(得分:3)

您正在返回堆栈地址,该函数在函数结束时最终被销毁。 堆栈变量是局部变量,它们的范围仅限于它们创建的函数。 它们是在函数上创建的,并在函数结束时被销毁,因此如果您以后尝试访问此地址,您将获得未定义的行为。 您应该有一个动态分配的指针,以便能够在函数外部访问它,或者按值返回,复制内容(在数组的情况下可能代价很高)。

您可以执行以下操作:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int* getLottoDraw();
void printArray(int * array);
int find_matches(int * array1, int * array2);


int main(int argc, char *argv[])
{
  int * lotteryDraw = getLottoDraw();

  printArray(lotteryDraw);

  free(lotteryDraw);

  return 0;
}

int* getLottoDraw(){
 int* draw = malloc(sizeof(int)*6);

 int i;
 srand(time(NULL));

 for (i = 0; i < 6; i++) {
     int r = rand() % 49;
     draw[i] = r;
 }
 return draw;
}

void printArray(int *array){
     int i;
     for (i = 0; i < 6; i++){
         printf("%i ", array[i]);
     }
}