Merkwürdiges Verhalten beim Drucken von Zeigern

Ich habe folgenden Code:

#include <stdio.h>

typedef struct {
  int* arg1;
  int  arg2;
} data;

int main(int argc, char** argv) {
  data d;
  printf("arg1: %p | arg2: %d\n", d.arg1, d.arg2);
}

Die Ausgabe endet damitd.arg1&nbsp;ist nichtNULL&nbsp;undd.arg2&nbsp;ist 0. Zum Beispiel:

arg1: 0x7fff84b3d660 | arg2: 0

Wenn ich einen Zeiger auf main hinzufüge, ändert sich nichts. Wenn ich diesen Zeiger jedoch drucke:

#include <stdio.h>

typedef struct {
  int* arg1;
  int  arg2;
} data;

int main(int argc, char** argv) {
  data d;
  int* test;
  printf("arg1: %p | arg2: %d | test: %p\n", d.arg1, d.arg2, test);
}

die Ausgabe ergibt immer:

arg1: (nil) | arg2: 4195264 | test: (nil)

Warum erlebe ich dieses Verhalten? Ich verstehe nicht, wie das Drucken eines anderen Zeigerwerts den Wert eines anderen Zeigers in NULL ändert. Beachten Sie, dass der von mir verwendete Compiler GCC 4.8.2 ist.