Можете ли вы помочь мне понять эту программу? - PullRequest
0 голосов
/ 25 мая 2019

Можете ли вы помочь мне понять, почему я получаю этот вывод.

#include<stdio.h>
#include<string.h>
void main() {
char a[] = "Hello World";
char *p;
p=a;
printf("%d%d%d%d",sizeof(a),sizeof(p),strlen(a),strlen(p));
}

Выход: 1281111 (Моя ОС 64-битная)

Сказав, что приведенный выше код должен показывать 1241111 (вывод), если он скомпилирован и работал на 32-битной системе. Из-за 64-битной Это показывает 1281111.

На первом курсе я увидел этот вопрос, и когда я пошел искать выходной файл, Я получаю 1281111.

Но на удивление вышеприведенный вывод кода имеет две опции: 1) 12121111 и 2) 1221111. (Вопрос об университете).

1 Ответ

1 голос
/ 25 мая 2019

Если вы измените оператор printf() на следующий, вам будет легче увидеть, что происходит:

printf("%d\n%d\n%d\n%d\n",sizeof(a),sizeof(p),strlen(a),strlen(p));

В моей системе это приводит к выводу:

12
8
11
11

Другими словами:

  • Размер массива составляет 12 байт. (11 для строки, плюс один для символа \0.)
  • Размер указателя составляет 8 байт (потому что я использую компьютер с 64-разрядными адресами памяти, в отличие от 32-разрядного компьютера, который, скорее всего, выведет 4).
  • При использовании в качестве строк (char* указатели) a и p эквивалентны. (поскольку p указывает на a.) Длина строки Hello World равна 11 (поскольку strlen() не включает байт \0 в конце строки).

Надеюсь, это поможет.

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