Кибор » Кибор - Интегрированная среда разработки ботов » О программе Кибор » Версия 5.46 Передача указателей на указатели в вложенных функциях

Страниц (1): [1]
 

1. Kibor - 04 Декабря, 2018 - 13:56:49 - перейти к сообщению
Доработал.
Стало возможно не ограниченное использование указателей Кибор #
Теперь можно передавать указатели на указатели в вложенные функции.

Поясняющий пример когда нельзя обойтись без указателей, так как функция fun2 не знает с какой переменной работать будет и глобальную переменную там использовать нельзя:
CODE:
int a;
fun1(#a, 5);
messagebox (a);
int b;
fun1(#b, 7);
messagebox (b);

function fun1(int #a1, int t)
{
a1=t;
fun2(#a1);//Передаем указатель на переменную a, так как переменная a1 это и есть переменная a, поскольку a1 это указатель на a
}


function fun2(int #a2)
{
a2=a2+2;
}


еще:
CODE:
int x=55, y;
int Image[5][30][30];
loadimage (#Image[0][0][0], "C:\Image_0.bmp");
loadimage (#Image[1][0][0], "C:\Image_1.bmp");
sleep(500);
int tt=2;
ss(#Image[0][0][0], #x, #tt);

function ss(int #b, int #xx, int #r)
{
for (int n=0; n<r; n++)
{
findimage(1, #b[n][0][0], -1, #xx, #y, 0, 0, 1000, 568, -1);
messagebox (xx);
}

dd(#b[0][0][0], #xx, r);
}


function dd(int #w, int #xxx, int k)
{
messagebox (k);

xxx=55;

for (int n=0; n<k; n++)
{
messagebox (findimage(1, #w[n][0][0], -1, #xxx, #y, 0, 0, 1000, 568, -1));
}
}
2. Skycrew - 05 Декабря, 2018 - 03:16:35 - перейти к сообщению
Разъяснить бы поподробнее, как можно использовать это нововведение..
Пока я понял, что это позволяет искать картинку по указателю на ее массив..
3. Kibor - 05 Декабря, 2018 - 03:55:46 - перейти к сообщению
 Skycrew пишет:
это позволяет искать картинку по указателю на ее массив

Не только.
Это позволяет манипулировать данными, указатели на которые были переданы в первую функцию в других функциях (которые вызываются из первой) не прибегая к глобальным переменным. Или их не всегда можно использовать.

До этого можно было использовать указатели только для одной функции. А с нее уже в другую нельзя было передавать указатели на принятые указатели.

Пример. В функциях не используются глобальные переменные a[] и n
Работа с ними идет только через указатели. Указатели в параметрах функций fun1 и fun2 не обязательно должны иметь разные названия.
CODE:
int a[200];
int n;


n=rand(0, 200);
fun1(#a[0], #n);
messagebox (a[n]);


function fun1(int #a1, int #n1);
{
//Тут мы что то делаем с перменной a[n] (по указателю на нее a1)
a1[n1]=5;
//Тут нам надо с переменной a[n] что то сделать в другой функции.
//Поэтому передаем во вторую функцию указатель на указатель на массив переменных a
fun2(#a1[0], #n1);
}


function fun2(int #a2, int #n2);
{
a2[n2]=a2[n2]+2;
}
4. Skycrew - 06 Декабря, 2018 - 03:36:41 - перейти к сообщению
А почему работать с указателями лучше, чем с глобальными переменными напрямую?
5. Kibor - 06 Декабря, 2018 - 03:44:37 - перейти к сообщению
С ними не лучше работать.
Просто бывают моменты, когда функции которые вызываются с первой функции не знают с какой именно переменной будут работать, как в примере выше. Поэтому она должна работать с переменной, с которой работала функция ее вызвавшая.
То есть функция fun2 работает с той же переменной что функция fun1
Синхронизировать это можно только с помощью указателей на одну и ту же переменную.
Так как в функции fun2 нельзя указать работу с конкретной глобальной переменной, так как она зависит от того с чем работает fun1.
6. Skycrew - 06 Декабря, 2018 - 04:52:28 - перейти к сообщению
 Kibor пишет:
С ними не лучше работать.
Просто бывают моменты, когда функции которые вызываются с первой функции не знают с какой именно переменной будут работать, как в примере выше. Поэтому она должна работать с переменной, с которой работала функция ее вызвавшая.
То есть функция fun2 работает с той же переменной что функция fun1
Синхронизировать это можно только с помощью указателей на одну и ту же переменную.
Так как в функции fun2 нельзя указать работу с конкретной глобальной переменной, так как она зависит от того с чем работает fun1.


Я понял. Спасибо!

Powered by ExBB FM 1.0 Final