Wstęp do wskaźników

Wstęp do wskaźników
A1
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:10
0

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

Kopiuj
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.

edytowany 1x, ostatnio: anastazja11
lion137
  • Rejestracja:ponad 8 lat
  • Ostatnio:3 minuty
  • Postów:4949
0

Gdzie Piszesz a[0]?


A1
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:10
0

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

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:20 dni
0

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

Kopiuj
#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;
}

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.