Вывод следующей программы даст вам некоторые подсказки и понимание размера типа и указателя на тип.
#include <stdio.h>
int main(void)
{
int p1[10];
int *p2[10];
int (*p3)[10];
printf("sizeof(int) = %d\n", (int)sizeof(int));
printf("sizeof(int *) = %d\n", (int)sizeof(int *));
printf("sizeof(p1) = %d\n", (int)sizeof(p1));
printf("sizeof(p2) = %d\n", (int)sizeof(p2));
printf("sizeof(p3) = %d\n", (int)sizeof(p3));
return 0;
}
int p[10]; => 10 consecutive memory blocks (each can store data of type int) are allocated and named as p
int *p[10]; => 10 consecutive memory blocks (each can store data of type int *) are allocated and named as p
int (*p)[10]; => p is a pointer to an array of 10 consecutive memory blocks (each can store data of type int)
Теперь перейдем к вашему вопросу:
>> in the first code p points to an array of ints.
>> in the second code p points to an array of pointers.
Вы правы.В коде: 2, чтобы получить размер массива, на который указывает p, вам нужно передать базовый адрес
printf("%d", (int)sizeof(p));
, а не следующий
printf("%d", (int)sizeof(*p)); //output -- 4
эквивалент:
*p, *(p+0), *(0+p), p[0]
>> what's the difference between p[10] and
>> (*p)[10]...they appear same to me...plz explain
Ниже приводится ответ на ваш другой вопрос:
int p[10];
_________________________________________
| 0 | 1 | 2 | | 9 |
| (int) | (int) | (int) | ... | (int) |
|_______|_______|_______|_________|_______|
int (*p)[10]
_____________________
| |
| pointer to array of |
| 10 integers |
|_____________________|