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}?
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?
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