Другие языки программирования и технологии

Ну програмисты. . выручайте =) (язык Си) Плиз..!!

Вот такое нам задали:

1. Через указатели на указатели посчитать сумму двух чисел и записать в третье.

2. Написать примитивный калькулятор, пользуясь только указателями.

3. Найти факториал числа, пользуясь только указателями.

4. Найти заданную степень числа, пользуясь только указателями.

5. Произвести, используя указатель на указатель проверку на нуль при делении.

Хотяб зо два задания мне зделаете ?? или хоть обясните на пальцах. . ато я с етими указателями не сильно дружу =)
Буду безгранично благодарен за помощь..!!
Как ты уже наверное знаешь, компьютерная память состоит из ячеек. Эти ячейки пронумерованы от 0 и до дофига :)
Номер ячейки в памяти называется ее адресом.
Переменная, фактически, - это ячейка памяти, которой дали имя.
Кроме имени, переменная имеет еще и адрес, - т. е. номер ячейки.
Например int a; В памяти одной из ячеек дали имя 'а'.
Она имеет какой-то адрес (номер ячейки) . Чтобы узнать какой, - пишут &a.
Указатель это переменная, в которой хранится адрес (номер ячейки) другой переменной.
Например int *pa; Звездочка перед именем переменной означяает, что в этой переменной собираются хранить не целые числа (int) а адреса переменных, где лежат эти числа.

Ну на пальцах. Есть у тебя ящичек (переменная) , в который ты кладешь написанное на бумажке число. На ящичке написано 'а' (в смысле имя переменной) . Ящичков у тебя много, и они все пронумерованы.
А есть у тебя еще другой ящик (указатель) подписанный как *pa, в котором хранятся уже не бумажки с числами, а адреса, т. е. заглядываешь ты в такой ящик, а там лежит бумажка, на которой написано: "число смотри в ящике номер 345".
А можно сделать указатель на указатель. Т. е. заглядываешь ты в такой ящик а там написано: "число смотри в ящике, номер которого указан в ящике номер 456".
записывается как int **ppa; Две звездочки означают указатель на указатель.

Ну теперь твое задание:
int a, b, c;
a=10;
b=20;
int *pa, *pb, *pc;
*pa=&a;
*pb=&b;
*pc=&c;
*pc=*pa+*pb; //1. Через указатели на указатели посчитать сумму двух чисел и записать в третье.

Что тут происходит?
int a, b, c; В памяти трем ячейкам условно дали имена a, b и c.
int *pa, *pb, *pc; Еще трем ячейкам в памяти дали имена pa, pb и pc.
Кроме того указывается что эти ячейки предназначены не для целых чисел, а для адресов других переменных, в которых уже будут хранится целые числа.
*pa=&a; Здесь в переменную pa записывается адрес переменной а. Т. е. в ящичек pa ты кладешь бумажку на которой пишешь: "число смотри в ящике номер такой-то". Номер ячейки переменной a определяется с помощью записи &a.
Аналогично *pb=&b; и *pc=&c;

*pc=*pa+*pb;
Вот тут посложнее. Фактически означает следующее:
*pa - Посмотреть в ящике названном pa номер другого ящика, в котором хранится первое число. Вытащить из этого ящика первое число.
*pb - Посмотреть в ящике названном pb номер другого ящика, в котором хранится второе число. Вытащить из этого ящика второе число.
Сложить числа.
Теперь нужно сохранить результат (сумму чисел) . Для этого нужно вначале определить номер ящика в который положить результат.
Номер лежит в ящике названном pc. Положить в ящик номер которого только что нашли результат сложения.
Евгений Булгаков
Евгений Булгаков
3 831
Лучший ответ
Стертый... Из Памяти... Спасибаааа..!!
Понял.. зделал..!
+10
блин, я тут для сраного экселя не могу подсказку найти, а ты про како-то Си спрашиваешь
Daniyar Ertaev
Daniyar Ertaev
84 890
в Сях указатели первое дело ))) их не освоишь, зачем тогда вообще учить, там же вся гибкость языка на указателях держится
Нур Досболов
Нур Досболов
20 115
Стертый... Из Памяти... Тута проблем такой.. не успеваю за один день все овоить.. просто на завтра нада решение, а я только сегодня взялса за них (!)
Если шариш зделай хоть одно пплиииизз..!!