Странное поведение при печати указателей

У меня есть следующий код:

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

В результате получается, чтоd.arg1 не являетсяNULL а такжеd.arg2 равно 0. Например:

arg1: 0x7fff84b3d660 | arg2: 0

Когда я добавляю указатель на main, ничего не меняется. Однако, когда я печатаю этот указатель:

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

результат всегда приводит к:

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

Почему я испытываю это поведение? Я не понимаю, как печать другого значения указателя изменяет значение другого указателя на NULL. Обратите внимание, что я использую компилятор GCC 4.8.2.

Ответы на вопрос(3)

Ваш ответ на вопрос