Wstęp do wskaźników

0

Mam program którego działania nie do końca rozumiem.
#include <iostream>
using namespace std;

int a[2][2];
int g(int *x, int i, int j) {
	x[0] = (i + 2) % 4;
	if (i <= j)
		if (g(x, j, i) <= j)
			x[1] = i + (j++);
	return x[1];
}
void h(void) {
	a[1][0] = g(a[0], 2, 3);
	a[0][1] = g(a[1], 5, 2);
}
int main() {
	h();
	cout<<a[0][0]<<<<a[0][1]<<a[1][0]<<a[1][1];
	
	
	return 0;
}

W pierwszm przypadku rozumiem że do funkcji g wysyłamy adresy tablic a[0][0] i a[1][0]. Pytanie dlaczego nie mogę napisać a zamiast a[0], skoro a jest adresem początku tablicy. Następnie tworzę wskażnik na te adresy. Dlaczego nie jest to tablica wskaźników skoro przesyłam tablice dwuwymiarową. Następnie przypisujemy wartości do tablicy jednowymiarowej x. Czy mam rozumięć że tak naprawde przesyłam tablice jednowymiaroą. Czy mógłby ktoś mi wytłymaczyć jak to działa. Mam napisać co wypisze program. Nie jest to oczywiście problem wystarczy wkleić kod i uruchomić program. Ale chciałabym zrozumieć jak dokładnie działa ten program.

0

Gdzie Piszesz a[0]?

0

W funkcji h a[1][0] = g(a[0], 2, 3);

0

Może to wyjaśni czemu nie możesz przekazać a:

#include <typeinfo>
#include <iostream>
using namespace std;

void foo(int x[][2])
{
	printf("%s\n",typeid(x).name());
	printf("%s\n",typeid(x[0]).name());
	printf("%s\n",typeid(x[0][0]).name());
}

int main() 
{
	int a[2][2];
	printf("%s\n",typeid(int).name());
	printf("%s\n",typeid(a[0][0]).name());
	printf("%s\n",typeid(int[2]).name());
	printf("%s\n",typeid(a[0]).name());
	printf("%s\n",typeid(int[2][2]).name());
	printf("%s\n",typeid(a).name());
	foo(a);
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1