я понял, что я имел некоторую путаницу в отношении стоимости разыменованного указателя, как я читал текст C с следующим фрагментом коды:Что такое ценность разыменованного указателя
int main()
{
int matrix[3][10]; // line 3: matrix is tentatively defined
int (* arrPtr)[10] = matrix; // line 4: arrPtr is defined and initialize
(*arrPtr)[0] = 5; // line 5: what is the value of (*arrPtr) ?
Моей путаницы в относится к значению * arrPtr в последней строке. Это мое понимание до этого.
Строка 3, матрица объявляется (предварительно определена) как массив из 3 элементов массива типов из 10 элементов типа int.
Строка 4, arrPtr определяется как указатель на массив из 10 элементов типа int. Он также инициализируется как ptr массиву из 10 элементов (т. Е. Первая строка матрицы)
Теперь строка 5, arrPtr разыменовывается, что дает фактический массив, поэтому он представляет собой массив из 10 целых чисел.
МОЙ вопрос: Почему значение массива - это просто адрес массива, а не каким-либо образом связанным с его элементами?
В выражении (* arrPtr) [0] = 5, учитывая, что индексный оператор [] требует указателя как одного из его операндов. Соответствует ли это требованиям? ArrPtr? –
'* arrPtr' - это массив (arrPtr указывает на массив и вы его разыгрываете), и вы можете использовать индекс на массивах. C вызывает '[]' array-subscriptip и требует, чтобы один операнд был указателем, однако он полагается на унизительные массивы, см. 6.5.2.1/2 в стандарте C (который явно говорит об этом): http://www.open-std.org/jtc1/sc22/wg14/www/standards.html – 2009-12-22 20:22:45
Собственно, пример в 6.5.2.1/4 также должен помочь. – 2009-12-22 20:25:49