Jak w C dynamicznie zaalokować tablicę dwuwymiarową?
powiedzmy:
int tablica[k][m];
0
0
Mam taki problem z tablicami, nie wiem dlaczego w drugiej kolumnie mam same 0, jak wstawiłem 75 i 7
Zdjęcie ----> http://zapodaj.net/cb3a3e5112a08.jpg.html
Mój kod
#include <stdio.h>
#include <math.h>
int main()
{
int tab[2][2]={
{5},{9},
{75},{7}};
int i,j;
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{printf("%d",tab[i][j]);
printf(" ");
}
printf("\n");
}
printf(" ");
system("pause");
return 0;
}
1
Tablica 2 wymiarowa, to tablica 1 wymiarowa, ktorej rozmiar jest iloczynem ilosci wierszy i kolumn, wiec wyglada to mniej-wiecej tak:
typedef struct {
unsigned w, h;
int* data;
} IntArray2Dim;
Zeby sie dalo tego uzywac w miare normalnie, mozemy zdefiniowac jeszcze kilka funkcji pomocniczych.
IntArray2Dim create(unsigned w, unsigned h) {
IntArray2Dim array;
array.w = w;
array.h = h;
array.data = (int*) calloc(w * h, sizeof(int));
return array;
}
int get(IntArray2Dim arr, unsigned i, unsigned j) {
return arr.data[arr.h * i + j];
}
void set(IntArray2Dim arr, unsigned i, unsigned j, int value) {
arr.data[arr.h * i + j] = value;
}
void destroy(IntArray2Dim arr) {
free(arr.data);
}
void print(IntArray2Dim arr) {
unsigned i, j;
for(i = 0; i < arr.w; ++i) {
for(j = 0; j < arr.h; ++j) {
int value = get(arr, i, j);
printf("%d ", value);
}
putchar('\n');
}
}
I przyklad uzycia:
int main(void) {
IntArray2Dim array = create(5, 3);
set(array, 4, 2, 123);
set(array, 3, 1, 100);
set(array, 0, 2, 250);
print(array);
destroy(array);
return 0;
}
0
Wybitny Lew napisał(a):
Mam taki problem z tablicami, nie wiem dlaczego w drugiej kolumnie mam same 0, jak wstawiłem 75 i 7
int tab[2][2] = {
{5, 9},
{75, 7}
};