Помогите осознать механику кода

Изучаю СИ на сайте метанит и вот наткнулся на вот этот код:

#include <stdio.h>
 
int main(void)
{   
    char *fruit[] = {"apricot", "apple", "banana", "lemon", "pear", "plum"};
    int n = sizeof(fruit)/sizeof(fruit[0]);
    for(int i=0; i<n; i++)
    {
        printf("%s \n", fruit[i]);
    }
    return 0;
}

Решил разобрать код, и для начала вывел на экран sizeof(fruit) и sizeof(fruit[0]) и меня удивили значения 24 и 4 соответственно, был бы благодарен за пояснение этой ситуации.Заранее спасибо!


Ответы (1 шт):

Автор решения: Harry
char *fruit[] = {"apricot", "apple", "banana", "lemon", "pear", "plum"};

Из инициализации видно, что в массиве 6 элементов, шесть указателей char*. Ergo, sizeof(fruit) равен 6*sizeof(char*) = 6*4 = 24 (в 32-разрядном приложении).

Размер sizeof(fruit[0]) равен размеру одного элемента, одного char* - sizeof(char*) == 4 байта.

Вот и все чудеса...

→ Ссылка