指向字段的指针 - 赋值错误/警告

时间:2013-11-23 10:44:02

标签: c

我需要使用总是有2列的2d字段。我有一个指向该字段的指针

int (*field)[2];
field = (int (*)[2]) malloc(rows * sizeof(*field)); /*further there will be also reallocating*/

当我将此指针调用到另一个函数的字段时出现问题。我调用此函数,但在将其分配给main中的原始字段时,会出现错误/警告。我真的尝试过这么多版本,但都没有。

int * function (int rows, int columns, int match, int **differentField) {
    int i, j;
    int (*field)[2];
    int foundMatch = 0;


    field = (int (*)[2]) malloc(rows * sizeof(*field));

    for (i = 0; i < rows; i++) {
        for (j = 0; j < colms; j++) {
            if (match == differentField[i][j]) {

                field[foundMatch][0] = i;
                field[foundMatch][1] = j;

                                foundMatch ++;
            }

int main (int argc, char ** argv) {
       int (*field)[2];
       int rows = 10;
       int columns = 10;
       int match = 1;
       int **differentField;

       /*creating different Field*/

       field = function(rows, columns, match, differentField);


}

- &GT;从不兼容的指针类型

分配

知道如何正确使用它吗?非常感谢你...

2 个答案:

答案 0 :(得分:0)

您无法从函数返回向量。相反,您可以返回一个指针:

int ** function (int rows, int columns, int match, int **differentField);

这意味着您将字段声明为:

int **field;

答案 1 :(得分:0)

嗯,编译器是正确的; int *int (*)[2]不同。您的代码示例现在不完整。我假设您打算在field函数中返回function。但是,您还有另一个问题:您无法返回数组。但是,您可以返回指向数组的指针。

如果是您尝试返回的字段,那么声明返回值的方式是:

int (**function(int rows, int columns, int match, int **differentField))[2]

然后当您返回字段时,请改为返回地址(return &field;)。

然后,在main field = *function(rows, columns, match, differentField);

至少,这一切都应该有效。我认为。现在已经很晚了,我整晚都在睡觉。

在某些时候,你应该真正研究typedef,让你的生活更轻松。

typedef int (*field_t)[2];

然后你可以field_t field;field_t *function(int rows, int columns, int match, int **differentfield);。那不是很好吗?