Cześć
W celu przyspieszenia wykonywania operacji na tablicach, chciałem użyć wskaźników.
Przykładowo do tej pory tworzyłem tablicę w taki sposób:
public static int[,] CreateArr(int N)
{
int[,] arr = new int[N, N];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
arr[i, j] = i * j;
}
}
return arr;
}
A potem w innym miejscu:
int[,] array = CreateArray(3);
Co oczywiście daje następującą tablicę:
0 0 0
0 1 2
0 2 4
Chciałbym jednak skorzystać ze wskaźników. Robię więc coś takiego:
public static unsafe int* CreateArr2(int N)
{
int* arr = stackalloc int[N * N];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
*(arr + i * N + j) = i * j;
}
}
return arr;
}
I potem:
int* arr = CreateArr2(3);
I tu niestety pojawia się problem, ponieważ otrzymuję "śmieci":
4 1638107264 31741676
88533484 88533400 1638454511
88533372 88533496 4597392
Jak można się z tym uporać?
Dodam jeszcze, że tworząc w ten drugi sposób tablicę bez udziału funkcji otrzymuję poprawne wyniki.