*: в Си X[i][j]можно заменить на *(*(X + i) + j) (а также на *(X[i] + j) или (*(X + i))[j]).X может быть (в скобках указано в каких случаях уместна запись X[i][j]):a) массивом массивов;b) указателем на массив (являющегося 0-й элементом динамического массива массивов);c) массивом указателей (на 0-е элементы динамических массивов);d) указателем на указатель (на 0-й элемент динамического массива указателей на 0-е элементы динамических массивов).#define TElem int
#define M 2
#define N 3
TElem a[M][N] // массив массивов
= {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
TElem (*b)[N] = &a[0]; // указатель на массив
/* // то же самое,
TElem (*b)[N] = a; // но короче
*/
TElem *c[M] = {a[0], a[1]}; // массив указателей
TElem **d = &c; // указатель на указатель
#include <stdio.h>
int main(void) {
TElem x;
#define i 1
#define j 2
puts("X[i][j]");
x = a[i][j]; printf("%d\n", x);
x = b[i][j]; printf("%d\n", x);
x = c[i][j]; printf("%d\n", x);
x = d[i][j]; printf("%d\n", x);
puts("(*(X + i))[j]");
x = (*(a + i))[j]; printf("%d\n", x);
x = (*(b + i))[j]; printf("%d\n", x);
x = (*(c + i))[j]; printf("%d\n", x);
x = (*(d + i))[j]; printf("%d\n", x);
puts("*(X[i] + j)");
x = *(a[i] + j); printf("%d\n", x);
x = *(b[i] + j); printf("%d\n", x);
x = *(c[i] + j); printf("%d\n", x);
x = *(d[i] + j); printf("%d\n", x);
puts("*(*(X + i) + j)");
x = *(*(a + i) + j); printf("%d\n", x);
x = *(*(b + i) + j); printf("%d\n", x);
x = *(*(c + i) + j); printf("%d\n", x);
x = *(*(d + i) + j); printf("%d\n", x);
return 0;
}i = (float)i;— Так как переменная слева
i имеет тип int, то значение выражения справа (float)i будет при присваивании преобразовываться обратно в int.printf("%f", i);— Область памяти, начинающаяся с адреса, по которому в стек при вызове printf пемещается значение типа int переменной i (и, соответственно, занимающая sizeof (int) байт) интерпретируется как хранящая значение типа float (размером sizeof (float) байт и захватывающая дополнительно посторонний мусор из стека). Т. е. это даже не арифметическое (пусть даже с округлением) преобразование.int main() {
int i = 1;
printf("%f", (float)i); // выводим на экран float
return 0;
} struct {char *face, *suit;} aCard = {"Three", "Hearts"};printf("pattern",..., aCard,...);printf("pattern",..., aCard.face, aCard.suit,...);aCard.suit в первом вызове printf в вопросе) оказывается лишним.printf("%s %s\n", aCard);Three Hearts