Тут у мене є вказівник ptrна масив arrіз 4 цілих чисел. ptrвказує на весь масив. ptr[0]або *ptrвказує на перший елемент масиву, тому додаючи 1, ptr[0]надає адресу другого елемента масиву.
Я не можу зрозуміти, чому використання sizeof(ptr[0])дає розмір усього масиву, 16 байт, а не розмір лише першого елемента, 4 байти (як ptr[0]вказує на перший елемент масиву).
int arr[4] = {0, 1, 2, 3};
int (*ptr)[4] = &arr;
printf("%zd", sizeof(ptr[0])); //output is 16
int *ptr = arr;? Власне, ні. int (*ptr)[4]створює ptrяк вказівник на повний масив з чотирьох intзначень. Синтаксис вказівника на зразок цього необхідний для динамічного розподілу істинно-багатовимірних масивів. "2-мірні масиви", створені за допомогою вкладених malloc()циклів і неправильно описані як багатовимірні масиви, справді є одновимірними масивами покажчиків на декілька 1-d масивів. Дивіться stackoverflow.com/questions/42094465/…
int *ptr = arr;? Це вказувало б на початок (перший елемент) масиву, який еквівалентний&arr[0].