Witam. Mam takie pytanie. W jaki sposób wypełnić tablice dwuwymiarową (10x7) samymi jedynkami, na pewno pętla for musi być dwa razy użyta na kolumnie i wierszu, ale jak zrobić żeby jedynki były w tej tablicy?
A jak ustawiłbyś pojedynczy element tablicy na wartość 1
?
na pewno pętla for musi być dwa razy użyta
Nie musi, ale nie będę Cię nęcił do korzystania z bezpośrednich operacji na pamięci, skoro jesteś - jak wnioskuję - początkującym ;)
Tb[y][x]=1;
char* Tab[10][5];
for(int y=0; y<10; y++)
for(int x=0; x<5; x++)
Tab[y][x] = '1';
Jeśli inicjalizujesz nową tablicę, możesz to zrobić bezpośrednio:
int tab[7][10] = { {1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1} };
przykład: https://ideone.com/mhrMK7
Możesz też tak:
const int x = 7, y = 10;
int tab[x][y];
int* p = tab;
for(int i = 0, i < x*y; i++, p++) p[i] = 1;
mto9 napisał(a):
Możesz też tak:
const int x = 7, y = 10;
int tab[x][y];
int* p = tab;
for(int i = 0, i < x*y; i++, p++) p[i] = 1;
O ile można domniemywać, że w większości przypadków to będzie działać zgodnie z założeniami, to wywołujesz tutaj tzw. undefined behaviour (UB), ponieważ dokonujesz dereferencji wskaźnika innego typu (int(*)[10]
na int*
) niż wskazywane na niego dane. (§5.2.10.7 §3.10.10 w standardzie). Ponadto, nawet gdybyś przypisywał p
jako p = tab[0];
to wywołałbyś UB w momencie wykroczenia poza 10-ty element tablicy (§5.7.5 w standardzie)
mto9 napisał(a):
Możesz też tak:
const int x = 7, y = 10;
int tab[x][y];
int* p = tab;
for(int i = 0, i < x*y; i++, p++) p[i] = 1;
Tak oczywiście że jest tu błąd, moja pomyłka :D
Raczej chodziło mi o coś takiego:
const int x = 7, y = 10;
int tab[x][y];
int* p = tab;
for(int i = 0; i < x*y; i++, p++) *p = 1;
A można zrobić tak? Bo nie jestem pewien:
const int x=5, y=7;
int tab[y][x];
//3 element (x) drugiej kolumny (y)
int *wsk = ( ( &tab[0][0] ) + ( 2 * 5 ) + 3 );