如何使函数读取c中的数组? [英] How to make a function to read an array in c?

查看:322
本文介绍了如何使函数读取c中的数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须编写函数来读取数组长度和数组,并使该数组可以用于其他函数。

I have to write function to read the array length and the array and make that array able to be used in other functions.

我已经阅读了许多关于指针的信息但我没有找到我的问题的答案。
这里是我的代码。

I have read many things about pointers but I didn`t find an answer to my question. Here is my code.

int readArray(int *ar, int *pointer){
    int i, length;
    scanf("%d", &length);
    ar = (int *) malloc(length * sizeof(int));
    for(i = 0; i < length; i++){
        scanf("%d", pointer + i);
    }
    return length;
}

void printArray(int *pointer, int length){
    int i;
    for(i = 0; i < length; i++){
        printf("%d ", *(pointer + i));
    }
}

int main(){
    int *pointer, *ar, length;
    pointer = ar[0];//Here I get the warnings.
    length = readArray(ar, pointer);
    printArray(pointer, length);
    return 0;
}

代码块中的警告:
警告:赋值使得整型指针无需转换

警告:'ar'在此函数中未初始化使用[-Wuninitialized] |

这个问题不同于这个动态内存访问只在函数内部工作,因为我必须读取readArray函数中的数组长度。对于我来说,作为一个begginer,只有很小的差别是一个很大的区别。

This question is different from this Dynamic memory access only works inside function because i have to read the array length in the readArray function. And for me, as a begginer, only little difference is a big difference.

推荐答案

我会考虑2个选项。一个返回指向数组的指针并将长度保存为指针,另一个返回长度但接受指针指针作为参数。

I would consider with 2 options. One returns pointer to array and saves length as pointer and another returns length but accepts pointer to pointer as parameter.

该选项将返回指向已分配和已填充数组的指针,并将长度保存到作为参数传递的指针中。

This option will return pointer to allocated and filled array and length will be saved to pointer passed as parameter

int* readArray(int* length) {
    int* arr;
    //Scan for length
    scanf("%d", length);
    //Allocate memory
    arr = (int *)malloc(...);
    //Fill data
    ...
    return arr;
}

我会像这样使用它:

int length;
int *pointer;

pointer = readArray(&length);
printArray(pointer, length);






选项2:传递指向指向数组的指针的指针和返回数组长度


Option 2: Pass pointer to pointer to array and return length of array

int readArray(int ** ar) {
    int length;
    ....
    *ar = (int *)malloc(...);
    ...
    return length;
}

用法:

Usage:

int* ar;
int length;

length = readArray(&ar);
printArray(ar, length);

我会选择这个选项。

这篇关于如何使函数读取c中的数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆