将指针传递给数组并分配内存

时间:2018-01-01 17:35:49

标签: c arrays pointers

我正在尝试将指针从main传递给我编写的函数,该函数假设分配大小为整数的内存并接收来自用户的输入。

现在我知道我做错了,因为指针在主函数中没有改变。有人能告诉我究竟做错了什么吗?

int rows, *newCol=NULL // the pointer inside main();//rows is the size of the array.

功能:

void buildArr(int *newCol, int rows);

void buildArr(int *newCol, int rows)
{
    int i;
    newCol = (int*)malloc(sizeof(int)*rows);
    for (i = 0; i<rows; i++)
    {
        printf("enter the value of the newCol:\n");
        printf("value #%d\n", i + 1);
        scanf("%d", &newCol[i]);
    }


}

1 个答案:

答案 0 :(得分:3)

指针不应在callee中更改。 C是按值传递的。

传递指针变量的地址

称之为

buildArr(&newCol,rows);
...
...
void buildArr(int **newCol, int rows)
{
    int i;
    *newCol = malloc(sizeof(int)*rows);
    ...
        scanf("%d", &(*newCol)[i]);
    }
    // nothing is returned.
}

或返回已分配块的地址

newCol = buildArr(newCol, rows);
...
...
int* buildArr(int *newCol, int rows)
{
    int i;
    newCol = malloc(sizeof(int)*rows);
    ...
        scanf("%d", &newCol[i]);
    ...
    return newCol;
}