Evelyn
Evelyn

Reputation: 2656

Pass 2d array to function in C?

I know it's simple, but I can't seem to make this work.

My function is like so:

 int GefMain(int array[][5])
 {
      //do stuff
      return 1;
 }

In my main:

 int GefMain(int array[][5]);

 int main(void)
 {
      int array[1800][5];

      GefMain(array);

      return 0;
 }

I referred to this helpful resource, but I am still getting the error "warning: passing argument 1 of GefMain from incompatible pointer type." What am I doing wrong?

EDIT:

The code is in two files, linked together by the compiler. I am not using gcc. The above code is exactly what I have, except the function is declared as "extern int" in the main. Thank you all for your time.

Upvotes: 2

Views: 9467

Answers (3)

ShinTakezou
ShinTakezou

Reputation: 9661

It compiles rightly even with -std=c99 -pedantic options. And it looks right anyway... Is it really the code you want we check? Compiler you're using...?

Upvotes: 1

Jamie
Jamie

Reputation: 7411

gcc will have extensions for what you've had (and others have had sucess with). Instead try this, it'll be more portable to other c compilers:

int g(int (* arr)[5])
{
    return 1;
}

int main()
{
    int array[1800][5];
    g(array);
    return 0;
}

or better yet;

int g(int (* arr)[5], int count)
{
    return 1;
}

int main()
{
    int array[1800][5];
    g(array, sizeof(array)/sizeof(* array));
    return 0;
}

You're getting a warning because an array of any dimension becomes a pointer when it is passed as an arguement, the above gives the compiler a clue that it should expect such.

Upvotes: 0

Mark Rushakoff
Mark Rushakoff

Reputation: 258138

The code is fine. In a single file, this compiles fine for me with gcc.

int g(int arr[][5])
{
    return 1;
}

int main()
{
    int array[1800][5];
    g(array);
    return 0;
}

My guess is that you're #includeing the wrong file -- perhaps one that had a different declaration for GefMain. Or perhaps you just haven't saved the file that declared GefMain, so it still has an argument of int [][3], for instance, which would cause the warning.

I would suggest that you post the entire code to reproduce the problem (after you strip out everything that's unneeded to reproduce it, of course). But chances are, at that point, you'll have solved it yourself.

Upvotes: 2

Related Questions