#c #arrays #pointers
#c #массивы #указатели
Вопрос:
Я изучаю C, и теперь у меня путаница с указателями. Мой вопрос в том, почему printf(«%d», *(i)); не возвращает элемент вместо адреса при использовании многомерного массива??
#include <stdio.h>
int main()
{
int i[2][2] = {{1,8},{2,9},{3, 4}};
//int i[2] = {1,2,3};
printf("%d", *(i));
printf("n%d", i);
}
Комментарии:
1. Пожалуйста, обратите также внимание, что в вашем коде
i
имеет длину 2, но инициализатор содержит 3 элемента.
Ответ №1:
Ну, это массив массивов, поэтому при индексации / разыменовании его один раз вы получаете массив, который распадается на указатель…
Комментарии:
1. Да, и изображение в этой статье должно объяснить это подробнее: c-faq.com /~scs/cclass/int/sx9b.html
2. @dbrank0: Страница, на которую вы ссылаетесь, посвящена «моделированию многомерных массивов» с использованием нескольких уровней массивов указателей. Это нечто отличное от «обычного» многомерного массива, который мы имеем здесь. Таким образом, картинка не совсем корректна для этого вопроса.
Ответ №2:
Поскольку многомерный массив может быть записан как **i, то, что вы делаете *(i), дает вам адрес первого массива.