Avatar billede hclarsen Nybegynder
10. juli 2008 - 15:26 Der er 6 kommentarer og
2 løsninger

Arrays i C

Når jeg angiver et array, e.g.

int testarr[2] = {1,2,3}

- er ovenstående udtryk så ækvivalent med

int testarr[1][2] = {1,2,3}?
Avatar billede arne_v Ekspert
10. juli 2008 - 15:38 #1
Jeg antager du mener [3] ikke [2].

Men nej et 1 D og et 2 D array er aldrig det samme.

Data ligger dog ens i memory.
Avatar billede hclarsen Nybegynder
10. juli 2008 - 15:40 #2
Ja, det er [3], og ikke [2].

Et 1-D array er en vektor, som er en matrix med en søjle. Hvorfor kan jeg så ikke skrive det på ovenstående måde?
Avatar billede segmose Nybegynder
10. juli 2008 - 15:53 #3
Det er vist

int testarr[1][3] = {{1},{2},{3}}};
Avatar billede arne_v Ekspert
10. juli 2008 - 15:56 #4
Du er noedt til at angive det som et 2 D array.
Avatar billede hclarsen Nybegynder
10. juli 2008 - 16:01 #5
Ok, jeg forstår. Arne, smid du også et svar - så får I begge point.
Avatar billede arne_v Ekspert
10. juli 2008 - 23:34 #6
Det må da skulle være:

int testarr[1][3] = { { 1, 2, 3 }};
Avatar billede arne_v Ekspert
10. juli 2008 - 23:38 #7
og et svar
Avatar billede arne_v Ekspert
11. juli 2008 - 00:02 #8
Til inspiration:

#include <stdio.h>

void dump1(int a[2][3])
{
    int i, j;
    for(i = 0; i < 2; i++)
    {
        for(j = 0; j < 3; j++)
        {
            printf(" %d", a[i][j]);
        }
        printf("\n");
    }
}

void dump2(int a[][3], int n)
{
    int i, j;
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < 3; j++)
        {
            printf(" %d", a[i][j]);
        }
        printf("\n");
    }
}

void dump3(int *a, int n, int m)
{
    int i, j;
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < m; j++)
        {
            printf(" %d", a[i * m + j]);
        }
        printf("\n");
    }
}

void dump4(int a[2][3]);
void dump5(int a[2][3]);

int main()
{
    int a[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };
    dump1(a);
    dump2(a, 2);
    dump3((int *)a, 2, 3);
    dump4(a);
    dump5(a);
    return 0;
}

og

      SUBROUTINE dump4(a)
      INTEGER*4 a(3,2),i,j
      DO 100 i=1,2
        WRITE(*,*) (a(j,i),j=1,3)
100  CONTINUE
      END
      SUBROUTINE dump5(a)
      INTEGER*4 a(3,2)
      CALL dumpx(a,3,2)
      END
      SUBROUTINE dumpx(a,m,n)
      INTEGER*4 a(m,n),i,j
      DO 100 i=1,n
        WRITE(*,*) (a(j,i),j=1,m)
100  CONTINUE
      END
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester