скрытое меню

Возврат указателя через входной параметр

Особый случай , когда надо из функции просто вернуть какой либо указатель или проще адрес чего-то в памяти.

Делаем это традиционно возврат указателя через входной параметр функции, т.к. return у нас обычно используется для возврата общего результат выполнения функции (успешно или не успешно).

К примеру у нас есть массив uint8_t arr[100] , который мы в функции обрабатываем и находим нужное смещение. Это просто адрес элемента массива в памяти. И вот его адрес и надо вернуть из функции.

Первый вариант

Можно использовать двойной указатель как параметр функции.

volatile uint8_t rxWifi[100];

void funcPP( uint8_t **pData)
{
	*pData = (uint8_t*)(rxWifi +2);
	return;
}

main(){
   for(size_t ii=0; ii < 10 ; ii++)
	rxWifi[ii]= ii+0x30;

   printf("'%s'\n" , rxWifi);

   volatile uint8_t * pData = 0;

   funcPP( &pData );

   printf("'%s'\n" , pData);

Вывод :
'0123456789'
'23456789'

Что и требовалось получить pData это указатель на второй элемент (&arr[2]) .

Второй вариант

Тоже рабочий вариант. Но по-другому : в main объявляем сразу указатель uint32_t pData = 0.

void funcPP( uint32_t *pData)
{
	*pData = (uint8_t*)(rxWifi +2);
	return;
}
main()
{
   printf("'%s'\n" , rxWifi);

   volatile uint32_t pData = 0;

   funcPP( &pData );

   printf("'%s'\n" , (uint8_t*)pData);

Тем лучше , чем хуже варианты.

Первый вроде не требует знания как объявлять указатель pData : uint32_t или еще как-то.