sizeof для массива символов - PullRequest
5 голосов
/ 28 января 2012

почему я получаю результаты 6, а затем 8 по следующему коду? Я просматривал сообщения, но не могу найти точное соответствие моего вопроса. Спасибо.

#include <stdio.h>

void getSize(const char *str)
{
        printf("%d\n", sizeof(str)/sizeof(char));
}

int main()
{
        char str[]="hello";
        printf("%d\n", sizeof(str)/sizeof(char));
        getSize(str);
}

Ответы [ 2 ]

7 голосов
/ 28 января 2012

В вашей функции getSize(), str является указателем. Поэтому sizeof(str) возвращает размер указателя . (что в данном случае составляет 8 байт)

В вашей функции main(), str - это массив. Поэтому sizeof(str) возвращает размер массива .

Это одно из тонких различий между массивами и указателями.

2 голосов
/ 28 января 2012

Разные виды, разные размеры.

В main, str - это char[6]. В getSize str это const char *. Указатель имеет (на 64-битной платформе) 8 байтов, поэтому (учитывая, что sizeof(char) = 1):

6/1 = 6
8/1 = 8
...