通过单独的函数创建和列出数组

时间:2018-11-16 22:03:46

标签: c arrays

要求我定义一个带有两个参数的函数array_print()

  • int *ptr表示一个指向整数数组的指针

  • int array表示数组的大小

并且列出了数组的元素而没有返回任何值;

带有一个参数的函数array_create()

  • int array表示数组的大小

并返回一个指向该数组的指针; 我需要在main()内部调用此函数以创建一个数组,并在调用array_print()中打印其元素。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#define MAX  100
#define SIZE  10

void array_print(int *ptr, int array) {
    for (int i = 0; i < array; i++){
        printf("Value of array[%d] is %d",i, *ptr);
        printf("\n");
    }
}

int* array_create(int array) {
    int *t = malloc(SIZE * sizeof(int));
    for (int i = 0; i < SIZE; i++) {
        t[i] = rand() % MAX;
    }
    return t;
}

int main() {
  int *t = malloc(SIZE * sizeof(int));

  array_create(SIZE);
  array_print(t, SIZE);
  free(t);
  return 0;
}

我应该在(0,MAX)的间隔内获取输出随机元素,但是我却得到了。

Value of array[0] is 0
Value of array[1] is 0
Value of array[2] is 0
Value of array[3] is 0
Value of array[4] is 0
Value of array[5] is 0
Value of array[6] is 0
Value of array[7] is 0
Value of array[8] is 0
Value of array[9] is 0 

有人可以更正我的代码,以便它输出随机元素而不是0。

2 个答案:

答案 0 :(得分:0)

您的代码中有一些问题。

  1. 您同时在mallocmain中呼叫array_create。在main中,您需要做的是:

    int *t = array_create(SIZE);
    
  2. array_print中,您始终在取消引用数组中的第一个元素。可以做到:

    printf("Value of array[%d] is %d\n",i, ptr[i]);
    

答案 1 :(得分:0)

您必须增加指针,否则将重复ptr的第一个值n次。

void array_print(int *ptr, int array) {
for (int i = 0; i < array; i++){
    printf("Value of array[%d] is %d",i, *ptr); // should be printf("Value of array[%d] is %d",i, ptr[i]);
    printf("\n");

int main() {
  int *t = malloc(SIZE * sizeof(int)); // why are you creating your array again in main?

  array_create(SIZE);
  array_print(t, SIZE);
  free(t);
  return 0;
}

完整的工作代码示例:

    #include <stdio.h>
    #include <stdlib.h>
    #define MAX  100
    #define SIZE  10

void array_print(int *ptr, int array) {
    for (int i = 0; i < array; i++) {
        printf("Value of array[%d] is %d", i, ptr[i]);
        printf("\n");
    }
}

int* array_create(int array) {
    int *t = (int*)malloc(SIZE * sizeof(int));
    for (int i = 0; i < SIZE; i++) {
        t[i] = rand() % MAX;
    }
    return t;
}

int main() {
    int *ptr = array_create(SIZE);
    array_print(ptr, SIZE);
    free(ptr);
    return 0;
}