Я начал читать несколько статей о указателях на C, и у меня есть один пример, который я не понимаю.О указателях в C
пример отсюда: http://en.wikibooks.org/wiki/C_Programming/Pointers_and_arrays
Здесь:
Давайте посмотрим на несколько иной проблемы. Мы хотим иметь двухмерный массив, но нам не нужно иметь все строки одинаковой длины. Мы делаем объявление массива указателей. Вторая строка ниже объявляет A как массив указателей. Каждый указатель указывает на поплавок. Вот некоторые применимый код:
float linearA[30];
float *A[6];
A[0] = linearA; /* 5 - 0 = 5 elements in row */
A[1] = linearA + 5; /* 11 - 5 = 6 elements in row */
A[2] = linearA + 11; /* 15 - 11 = 4 elements in row */
A[3] = linearA + 15; /* 21 - 15 = 6 elements */
A[4] = linearA + 21; /* 25 - 21 = 4 elements */
A[5] = linearA + 25; /* 30 - 25 = 5 elements */
A[3][2] = 3.66; /* assigns 3.66 to linearA[17]; */
A[3][-3] = 1.44; /* refers to linearA[12];
negative indices are sometimes useful.
But avoid using them as much as possible. */
Мой вопрос, почему A[0]
является указателем только пять элементов, а не ко всем linearA
, так как имя массива является указателем на его первый элемент.
И A[1] = linearA + 5;
- 6 элементов в ряду - по той же причине? Разве не A[1]
должен быть указателем на 6-й член linearA
?
Может кто-нибудь объяснить, где моя ошибка?
Предполагается, что 'A [0]' будет использоваться как указатель на первый элемент массива из пяти 'float'. Вы также можете использовать его как указатель на первый элемент массива из 30 'float', поскольку это то, что предоставляет' linearA'. Все это просто интерпретация. –
Указатели не имеют информации о том, что * количество элементов * они указывают на. Указатель на первый элемент массива размера 42 точно такой же, как для * количества элементов * того, на что они указывают, в качестве указателя на первый элемент массива размером 12000. В вашем примере 'A [0] '- указатель на первый элемент массива из 30 элементов ... но он не заботится о * числе элементов *. Программист интерпретирует его как * 5 элементов * перед выполнением других назначений. – pmg
@pmg: * тип * указателя указывает размер (и другую информацию) того, на что он указывает. Эта информация обычно не хранится во время выполнения. –