处理指针时如何解决冲突类型错误?

时间:2020-05-31 10:23:26

标签: c pointers

编码的新手,我在做问题学习。在这个问题上,我被困在应该编写代码的地方,该代码接受数组中的输入并使用指针将其打印出来。下面的代码请指出我从哪里得到的错误的。

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

int* record_array (int *size_ptr);
void print_array (int *array_ptr , int *size_ptr);


int* record_array (int *size_ptr)
{
    int *array_ptr = (int*) malloc(*size_ptr * sizeof(int));
    for (int index = 0;index < *size_ptr;++index)
    {
        printf("Enter element at index %d : ", index);
        scanf("%d", &array_ptr[index]);
    }
    return array_ptr;
}
void print_array (int *array_ptr, int *size_ptr)
{
    for (int index = 0;index < *size_ptr;++index)
    {
        printf("%d ",array_ptr[index]);
    }

}

int main()
{
    int size = 0;
    int *array = NULL;

    printf("How many elements do you want?");
    scanf("%d", &size);
    array = record_array(&size);
    print_array(array,&size);
    free(array);

    return 0;
}

1 个答案:

答案 0 :(得分:0)

当您测试某些想法时,没有scanf值。 scanf对于初学者可能非常棘手。还要使用正确的类型。

您不需要通过引用传递数组的大小。

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

int* record_array (size_t size);
void print_array (const int *array_ptr, size_t size);

int* record_array (size_t size)
{
    int *array_ptr = malloc(size * sizeof(*array_ptr));
    for (size_t index = 0;index < size; ++index)
    {
        array_ptr[index] = index;
    }
    return array_ptr;
}
void print_array (const int *array_ptr, size_t size)
{
    for (int index = 0; index < size; ++index)
    {
        printf("%d\t%s", array_ptr[index], (index % 6) ? "" : "\n");
    }

}

int main()
{
    size_t size = 0;
    int *array = NULL;

    printf("How many elements do you want?");
    scanf("%zu", &size);
    array = record_array(size);
    print_array(array,size);
    free(array);

    return 0;
}

https://godbolt.org/z/J9SEne

如果您要使用指针传递大小(并且不要在函数中更改大小)

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

int* record_array (const size_t *size);
void print_array (const int *array_ptr, const size_t *size);


int* record_array (const size_t *size)
{
    int *array_ptr = malloc(*size * sizeof(*array_ptr));
    for (size_t index = 0;index < *size; ++index)
    {
        array_ptr[index] = index;
    }
    return array_ptr;
}
void print_array (const int *array_ptr, const size_t *size)
{
    for (int index = 0; index < *size; ++index)
    {
        printf("%d\t%s", array_ptr[index], (index % 6) ? "" : "\n");
    }

}

int main()
{
    size_t size = 0;
    int *array = NULL;

    printf("How many elements do you want?");
    scanf("%zu", &size);
    array = record_array(&size);
    print_array(array,&size);
    free(array);

    return 0;
}

https://godbolt.org/z/Vwt9oS

请记住,如果传递的指针不是NULL,请务必对其进行检查,并检查malloc的结果