Я не понимаю, как инициализация буфера с {0}
меняет его расположение в памяти. Это моя тестовая программа.
#include <stdio.h>
char buf[0x100] = {0};
FILE* fp;
int main() {
fp = fopen("file.c", "r");
gets(buf);
fclose(fp);
return 0;
}
Я ввожу A*0x100+B*8
. Это их местоположения:
> p fp
$2 = (FILE *) 0x4242424242424242
> p &fp
$3 = (FILE **) 0x555555755140 <fp>
> p &buf
$4 = (char (*)[256]) 0x555555755040 <buf>
Их разница равна 0x100, как и ожидалось.
Если я уберу = {0}
,
char buf[0x100];
Местоположения станут
> p fp
$5 = (FILE *) 0x555555756260
> p &fp
$6 = (FILE **) 0x555555755040 <fp>
> p &buf
$7 = (char (*)[256]) 0x555555755060 <buf>
Почему при использовании {0}
местоположение меняется так сильно?
Я компилирую с gcc -g file.c
,
g cc версии 7.5.0 (Ubuntu 7.5.0-3ubuntu1 ~ 18.04)