webForumDet fria alternativet

skicka pekare till 2-dimensionell array till funktion.

C/C++

4 svar · 356 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#1

Hej

Hur gör man när man vill skicka till en funktion en pekare till en tvådimensionell array i C?

Jag har försökt med detta men får felmeddelande.

void func(int arr[][])
{
  printf("Jippi!");
}

void main(void)
{
  int arr[10][5];

  func(arr);

  return 0;
}
Medlem sedan juni 20014 290 inlägg
#2

Vad får du för felmeddelande?

Tog din kod och klistrade in i en fil på min linux burk, kompilerade fick 2st varningar:

aaa.c:14: warning: `return' with a value, in function returning void
aaa.c:9: warning: return type of `main' is not `int'

Jag ändrade så att main returnerar en int, den skall göra så enligt standarden plus att du i main har ett "return 0" rad.

Nu fungerar den.

void func(int arr[][])
{
          printf("Jippi!");
}
 
int main(void)
{
          int arr[10][5];
 
            func(arr);
 
              return 0;
}
Medlem sedan jan. 20013 406 inlägg
#3
#include <stdio.h>
#include <stdlib.h>
#define spelplan 5
#define true 1
#define false 0

int kollaSpel(int position[])
{

  return 0;
}

void skrivUtSpel(int position[][])
{

 int rad, kolumn;

  for(rad=0; rad<=spelplan; rad++)
    {
      for(kolumn=0;kolumn<=spelplan; kolumn++)
      {
        if(position[rad][kolumn]==0)
        {
          printf("[ ] ");
        }
        else
        {
          printf("[%i] ", position[rad][kolumn]);
        }
      }/*Avslutar kolumn utskriften*/
      printf("\n");
    }/*Avslutar rad utskriften*/
}

int markera(int position[], int spelare, int inmPosition[])
{
  int markera=1;

  if(inmPosition[0]<=spelplan && inmPosition[1]<=spelplan && inmPosition[0]>0 && inmPosition[1]>0){
    if(position[(inmPosition[0]-1)][(inmPosition[1])-1]==0){
      position[(inmPosition[0]-1)][(inmPosition[1]-1)]=spelare;
      markera=0;
    }
  }

  return markera;
}

int main(void)

{

  int position[7][4]={0}, inmPosition[2], spelare=1, spel=false, giltigt;

   do
    {
      skrivUtSpel(position);
      do{
        printf("\nSpelare %i\nVilken position vill du markera? ", spelare);
        scanf("%i %i", &inmPosition[0], &inmPosition[1]);
        giltigt = markera(position, spelare);
        if(giltigt==1){
          printf("Ogiltigt drag!\n");
        }

      }while(giltigt==1);

      /*Byt spelare*/
      if(spelare==1){
        spelare=2;
      }
      else{
        spelare=1;
      }

      spel=kollaSpel(position);

  }while(spel==false);

  return 0;

}

size of type 'int[]' is unknown or zer

får jag på flera ställen

Medlem sedan juni 20014 290 inlägg
#4

Hinner inte felsöka mera nu (återkommer under dagen, måste jobba lite också :) ) men jag får följande felmeddelanden som kanske kan vara till bättre hjälp:

aaa.c: In function `skrivUtSpel':
aaa.c:22: invalid use of array with unspecified bounds
aaa.c:28: invalid use of array with unspecified bounds
aaa.c: In function `markera':
aaa.c:40: subscripted value is neither array nor pointer
aaa.c:41: subscripted value is neither array nor pointer
aaa.c: In function `main':
aaa.c:62: warning: passing arg 1 of `markera' from incompatible pointer type
aaa.c:62: too few arguments to function `markera'
aaa.c:77: warning: passing arg 1 of `kollaSpel' from incompatible pointer type
make: *** [aaa] Error 1
Medlem sedan jan. 20013 406 inlägg
#5

Självklar t ska du jobba :) Ingen som vet varför? Måste redovisa denna labb innan 13.15

256 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)