Мне нужно создать массив символов динамически, основанный на длине шаблона, т.е. plen. Когда я делаю sizeof (table), я получаю 8. Почему я получаю 8 вместо 3.
int main()
{
char *pattern="aaa";
int plen=strlen(pattern);
char *table=new char[plen+1];
for(int i=0;i<plen;i++)
{
table[i]=pattern[i];
}
cout<<sizeof(table)<<plen<<table;
return 0;}
Выход, который я получаю, равен 83aaa..8 для sizeof (table) 3 для plen и aaa для таблицы, которая имеет сохраненное значение шаблона
Это потому, что table
является указателем, а не массивом. Размер указателя в вашей архитектуре составляет 8 байтов.
sizeof(expression)
является просто синтаксической альтернативой sizeof(type of that expression)
.
В вашем примере sizeof(table)
является просто синтаксической альтернативой sizeof(char*)
. Значение указателя или символа, на которое он указывает, или массив, на который он указывает, никогда не рассматриваются для результата, а только тип.
sizeof
происходит во время компиляции, в зависимости от типа.