Указатель на указатель - C (СИ)
Формулировка задачи:
Здравствуйте!
Подскажите, пожалуйста, в чём разница между (arr+1) и *(arr+1). Почему при их печати ( printf("%i\n",(arr+1)); и printf("%i\n",*(arr+1)); ) выводятся одинаковые числа, но printf("//%i\n",*(*(arr+1)+2)); и printf("%i\n",*((arr+1)+2)); выводят разные числа?
#include <stdio.h> #include <stdlib.h> int main() { int arr[2][3]; arr[0][0]=789; arr[0][1]=578; arr[0][2]=344; arr[1][0]=870; arr[1][1]=900; arr[1][2]=123; printf("%i\n",sizeof(int)); printf("%i\n",sizeof(arr)); printf("adr[0][0]= %i\n",&arr[0][0]); printf("adr[0][1]= %i\n",&arr[0][1]); printf("adr[0][2]= %i\n",&arr[0][2]); printf("adr[1][0]= %i\n",&arr[1][0]); printf("adr[1][1]= %i\n",&arr[1][1]); printf("adr[1][2]= %i\n",&arr[1][2]); //printf("%i\n",*(*(arr+1)+2)); printf("%i\n",arr);//&arr[0][0] printf("%i\n",(arr+1));//&arr[1][0] printf("%i\n",(arr+2));//&arr[2][0] printf("%i\n",(arr+3));//&arr[3][0] printf("%i\n",(arr+4));//&arr[4][0] printf("%i\n",(arr+5));//&arr[5][0] printf("//%i\n",*arr);//&arr[0][0] printf("%i\n",*(arr+1));//&arr[1][0] printf("%i\n",*(arr+2));//&arr[2][0] printf("%i\n",*(arr+3));//&arr[3][0] printf("%i\n",*(arr+4));//&arr[4][0] printf("%i\n",*(arr+5));//&arr[5][0] printf("//%i\n",**(arr)); //arr[0][0] printf("%i\n",**(arr+1));//arr[1][0] printf("%i\n",**(arr+2));//arr[2][0] printf("%i\n",**(arr+3));//arr[3][0] printf("%i\n",**(arr+4));//arr[4][0] printf("%i\n",**(arr+5));//arr[5][0] printf("//%i\n",*(*(arr+1)+2)); printf("%i\n",*((arr+1)+2)); return 0; }
Решение задачи: «Указатель на указатель»
textual
Листинг программы
int arr[2][3]={{789,578,344},{870,900,123}}; printf("%i\n\n",arr);//начальный адрес printf("%i\n",arr+1);//+1*3*4 printf("%i\n",*(arr+1));//изменился только тип,но не значение int**->int* printf("%i\n",**(arr+1));//870 printf("%i\n",*(*(arr+1)+2));//123 printf("%i\n",*(arr+3));//+3*3*4
Объяснение кода листинга программы
- Объявляется двумерный массив arr[2][3] и инициализируется значениями {789,578,344},{870,900,123}.
- Выводится начальный адрес arr.
- Выводится адрес arr+1, который является адресом второго элемента первого подмассива (789).
- Выводится значение по адресу arr+1, которое является значением второго элемента первого подмассива (578).
- Выводится значение по адресу **(arr+1), которое является значением второго элемента второго подмассива (870).
- Выводится значение по адресу ((arr+1)+2), которое является значением третьего элемента второго подмассива (123).
- Выводится адрес arr+3, который является адресом третьего элемента первого подмассива (344).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д