Многомерные массивы и указатели - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
   int zippo[4][2] = {{2,4},{6,8},{1,3},{5,7}};
 
   printf("    zippo = %p,   zippo + 1 = %p\n", zippo, zippo+1);
 
   printf("zippo[0] = %p, zippo[0] +1 = %p\n", zippo[0], zippo[0] + 1);
 
   printf("  *zippo = %p,   *zippo +1 = %p\n", *zippo, *zippo + 1);
 
   printf("zippo [0][0] = %d\n", zippo[0][0]);
   printf("  *zippo[0] = %d\n", *zippo[0]);
   printf("    **zippo = %d\n", **zippo);
   printf(" My  &zippo[0] = %p\n", &zippo[0]);
   printf(" My  &zippo[0][0] = %p\n", &zippo[0][0]);
   printf("      zippo[2][1]= %d\n", zippo[2][1]);
   printf("*(*(zippo +2) + 1) = %d\n", *(*(zippo+2) +1));
    return 0;
}
ВЫВОД: zippo = 0060FEF0, zippo + 1 = 0060FEF8 zippo[0] = 0060FEF0, zippo[0] +1 = 0060FEF4 *zippo = 0060FEF0, *zippo +1 = 0060FEF4 zippo [0][0] = 2 *zippo[0] = 2 **zippo = 2 My &zippo[0] = 0060FEF0 My &zippo[0][0] = 0060FEF0 zippo[2][1]= 3 *(*(zippo +2) + 1) = 3 Это из одного учебника по Си, строчки с My я сам добавил. То есть zippo = &zippo[0]=0060FEF0, при этом zippo[0] тоже должен указывать на первый элемент, то есть и он равен 0060FEF0. Это вроде как означает, что zippo[0] указывает на место в памяти, где сам же и находится, хотя в том месте памяти должно находиться интовое значение zippo[0][0] = 2; Что я такое упускаю, что не могу разобраться?

Решение задачи: «Многомерные массивы и указатели»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int zippo[3] = {1 , 2 , 3};
    int* a = zippo;
    printf("zippo = %p\n", zippo);
    printf("zippo+1 = %p\n", zippo+1);
    printf("*zippo = %d\n", *zippo);
    printf("&zippo = %p\n",&zippo);
    printf("&zippo[0] = %p\n",&zippo[0]);
     printf("&zippo[2] = %p\n",&zippo[2]);
    printf("*a = %d\n",*a);
    printf("&a = %p\n",&a);
 
    return 0;
}

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы