Modyfikacja statycznej tablicy w C

2011-10-14 20:35
Newb
0

Sprawa wydawałaby się prosta: deklaruje statyczną tablicę w C. Nastepnie chce ją zmodyfikować w procedurze. Wydaje mi się, że potrzebny jest wskaźnik do wskaźnika.

Próbowałem tak:

#include<stdio.h>

#define N 7

void init(int** a, int n) {
  int* ptr = *a;
  for(int i = 0; i < n; ++i)
    a[i] = -1;
}

int main(void)
{
  int tablica[N];
  init(&tablica, N);

  return 0;
}

Wywala następujący warning:

main.c: In function ‘main’:
main.c:33:18: warning: initialization from incompatible pointer type [enabled by default]

A chcę pobrać adres pierwszego elementu. Następująca konstrukcja daje to samo:

  init(&(tablica[0]), N);

Co robię źle?

Pozdrawiam,

Pozostało 580 znaków

2011-10-14 20:47
1

potrzebujesz wskaźnika - nie wskaźnika do wskaźnika.


I fart u die.

Pozostało 580 znaków

2011-10-14 20:49
Newb
0

Damn, rzeczywiście. Wcześniej musiał się wkraść inny błąd, który naprowadził mnie na ten błędny tok rozumowania (bo początkowo tak próbowałem, ale nie zadziałało).

Pozostało 580 znaków

2011-10-14 20:54
Newb
0
#include<stdio.h>
#include<stdlib.h>

#define N 20
#define PUSTY -2

typedef struct rekord {
  int klucz;
  int nast;
} rekord;

void inicjuj_tablice(rekord* t, int n)
{
  for(int i = 0; i < n; ++i) {
    t[i].klucz = PUSTY;
  }
}

int main()
{

  rekord tablica[N];
  inicjuj_tablice(tablica, N);

  for(int i = 0; i < N; ++i)
    printf("%d %d\n", i, tablica[i].nast);

  return 0;
}

A jednak coś wciąż jest nie tak, to oryginalny kod. Nie modyfikuje zawartości. Stąd pomyślałem, że potrzebny może być wskaźnik do wskaźnika.

W analogicznym kodzie to działa:

#include<stdio.h>

#define N 7

void init(int* a, int n) {
  for(int i = 0; i < n; ++i)
    a[i] = -1;
}

int main(void)
{
  int tablica[N];
  init(tablica, N);

  for(int i = 0; i < N; ++i)
    printf("%d\n", tablica[i]);

  return 0;
}

Pytanie: dlaczego?

Pozostało 580 znaków

2011-10-14 20:58
0

Inicjalizujesz klucz a wypisujesz nast.


"(...) otherwise, the behavior is undefined".

Pozostało 580 znaków

2011-10-14 20:58
Newb
0

Juz widze: po prostu wyswietlam nie ta zmienna co trzeba. Sorry.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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