у него, то только первый
Еще одно непонятное несоответствие у м-ра Фьюера. Если PRINT2 и PRINT3
определены как у него, то только первый их входящих в макроопределение операторов попадет в тело цикла. Если же как у нас - то все. Подробности см. в примечаниях к и к
Ссылки и массивы 3.1.
|
Переменная a - матрица 3х3 со строками 1 2 3, 4 5 6 и 7 8 9. |
int a[3][3] = { { 1,2,3 }, { 4,5,6 }, { 7,8,9 } }; |
Выражение a[i][j] относится к целому, находящемуся на расстоянии j от начала строки i. Значение a есть адрес первой строки матрицы a. Таким образом, a - ссылка на массив целых из трех элементов и a[] - ссылка на целое. |
int *pa[3] = { a[0],a[1],a[2] }; |
Выражение *pa[] приводится к целому, значит, pa[] - ссылка на целое, а pa - массив ссылок на целое. Элемент pa[0] инициируется первым элементом из первой строки a, pa[1] инициируется первым элементом из второй строки, pa[2] - первым элементом третьей строки. |
int *p = a[0]; |
Ссылка p есть ссылка на целое, первоначально указывающая на первый элемент первой строки матрицы a. |
Ссылки и массивы 3.2.
for ( i=0; i |
В цикле i принимает значения от 0 до 2. |
a[i][2-i] |
Выражение a[i][2-i] выбирает диагональные элементы от a[0][2] до a[2][0]. |
*a[i] |
*a[i] - адрес первого элемента i-й строки. |
*(*(a+i)+i) |
a+i - адрес i-й строки a, *(a+i) - адрес первого элемента i-й строки, *(a+i)+i - адрес i-го элемента из i-й строки. Наконец, *(*(a+i)+i) дает целое значение i-го элемента i-й строки. |
Ссылки и массивы 3.3.
for (i=0; i |
В цикле i принимает значения от 0 до 2. |
*pa[i] |
pa[i] относится к i-му элементу из pa, *pa[i] дает целое число, на которое указывает i-й элемент pa. |
p[i] |
Ссылка p указывает на первый элемент первой строки матрицы a. Так как базовый тип ссылки p - int, то p[i] дает i-й элемент первой строки из a. |
Об адресах массива. Мы уже несколько раз указывали, что адрес массива и адрес первого элемента массива есть одно и то же значение. В предыдущей задаче мы видели, что a и a[0] сводятся к одному и тому же адресу. Единственное различие между адресом массива и адресом первого элемента массива заключается в типе адреса, а значит, в единице измерения адресной арифметики. Таким образом, поскольку тип a - ссылка на массив целых из трех элементов, базовый тип a - массив целых из трех элементов, и a+1 указывает на следующий в памяти массив из трех чисел. В то же время тип a[0] - ссылка на целое, базовый тип a[0] - int и a[0]+1 указывает на следующее в памяти целое.
Содержание раздела