Wpis z mikrobloga

@jaroslawII: pierwsze to adres tablicy, drugie to adres jej pierwszego elementu, co nie zawsze jest tym samym, np.

#include
#include

struct foo {
  int bar;
  char baz;
};

int main() {
  struct foo **arr = malloc(sizeof (struct foo *) * 10);

  for (int i = 0; i < 10; i++) {
    arr[i] = malloc(sizeof (struct foo));
  }

  printf("&arr = %p\n", &arr);
  printf("&arr[0] = %p\n", &arr[0]);

  return 0;
}
@Malkof: no super, tylko to nie pokazuje, jak wygenerowac coś, co będzie miało inny adres, bo zwykła tablica na stosie będzie miała ten sam adres, co pierwszy element

int main() {
  int tab[] = {1};
  printf("&tab=%p\n", &tab);
  printf("&tab[0]=%p\n", &tab[0]);
  return 0;
}
zgadzam się, że pierwszy przykład jest mocno przekombinowany, ale pisałem go na kolanie xD ale przynajmniej pokazuje jakiś kontrprzykład, który powinien rozjaśnić nieco sytuację OPowi i to jest REALNA odpowiedź na pytanie, bo pokazuje, że istnieje JAKAŚ różnica między tymi wyrażeniami
masz #!$%@? prosty i się odczep :///////////////


@zwei: Czyżby doszło do małego incydentu kałowego? ( ͡° ͜ʖ ͡°)

To co chcesz powiedzieć, to że &tab != &tab[0] w sytuacji kiedy tab nie jest zdefiniowane jako "zwykły wskaźnik", ale wskaźnik do wskaźnika.

Moim zdaniem można wytłumaczyć to prościej - tab[0] to inaczej *(tab + 0). Jeśli tab to zwykły wskaźnik, to po prostu dostajesz konkretną wartość. Jeśli tab
Czyżby doszło do małego incydentu kałowego?


@groman43: żeby tylko małego, zesrałem się na miętowo, człowieku xD

To co chcesz powiedzieć, to że &tab != &tab[0] w sytuacji kiedy tab nie jest zdefiniowane jako "zwykły wskaźnik", ale wskaźnik do wskaźnika.


Tak

Moim zdaniem można wytłumaczyć to prościej - tab[0] to inaczej *(tab + 0). Jeśli tab to zwykły wskaźnik, to po prostu dostajesz konkretną wartość. Jeśli tab to wskaźnik do wskaźnika, to
Pobierz zwei - > Czyżby doszło do małego incydentu kałowego?

@groman43: żeby tylko małego,...
źródło: comment_1655979595TJ9wxZEYDjIgNbUQlZ21hY.jpg