2013-09-24 2 views
-2

У меня есть эта тестовая программа, и она дает ниже выход.sizeof на массиве, возвращающем разные значения

#include<iostream> 
#include<cstdio> 
void fun(char arr[]) 
{ 
printf(".size of char : %d\n.", sizeof(arr[0])); 
printf(".size of char array: %d\n.", sizeof(arr)); 
} 

main() 
{ 
char arr[10]={'a','b','c','d','e'}; 
fun(arr); 

printf("size of char array: %d\n", sizeof(arr)); 
} 

выход

.size полукокс: 1 ..size из массива символов: 8 .size из массива символов: 10

Теперь я понимаю, что в первом заявлении его размером члена массива, а в третьем выражении - размер всего массива, но что говорит 8 во втором printf здесь?

ответ

6

Передача имени массива распадается на указатель на его первый элемент. Таким образом, sizeof возвращает размер указателя, который равен 8 на вашей хост-системе.

3

Когда вы передаете «массив» функции, вы фактически передаете указатель на массив. Другими словами, выражение sizeof(array) в fun возвращает размер указателя.

Обычный вопрос в C и C++ - это если вы можете узнать размер массива, указав указатель на него. К сожалению, вы не можете.

0

Вы возвращаете размер указателя массива, а не массив. Когда вы передаете массив функции, компилятор отображает память указателя на ваш массив и передает его функции. Массив не передается. Это возвращает размер «8».

Смежные вопросы