Инициализатор буфера меняет адрес - PullRequest
0 голосов
/ 29 марта 2020

Я не понимаю, как инициализация буфера с {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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...