Код: Выделить всё
[/b]#include <stdio.h>
int main () {
int * a;
printf ("%d\n", sizeof a);
return 0;
}[b]Проще говоря, здесь имя переменой типа указатель есть имя переменной типа указатель. И всё. Но! В приведённой ниже функции имя переменной типа указатель есть имя массива. И sizeof возвращает размер имено всего массива, а не указателя на его нулевой элемент.
Код: Выделить всё
[/b]#include <stdio.h>
int main () {
int b [3];
printf ("%d\n", sizeof b);
return 0;
}[b]А теперь вопрос: такое вот отличие в работе функции sizeof обусловлено
1) Особенностямиэти функции sizeof? Т. е. она создана так, чтобы по-разному реагировать на указатели, когда один объявлен именно как указатель, а второй объявлен... ну другим способом. через объявление массива? Или
2) Всё-таки, хоть и там и там указатель, но они конструктивно, что ли, отличаются друг отдруга? А не просто содержанием- один содержит адрес переменной, а другой адрес нулевого элемента массива. И: именно это отличие и даёт о себе знать при вызове функции sizeof. Так?
Спасибо.