C语言 处理指针时如何应对冲突类型错误?



编码新手,我正在通过做题来学习。在这个问题中,我被困在我应该编写代码,该代码在数组中接受输入并使用指针打印它。这是下面的代码,请指出我错在哪里。

#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;
}

当你测试时,一些想法不会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("%dt%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("%dt%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的结果

最新更新