Обнуление структуры

Да, признаю, спешил и не верно функцию описал…

Нужно так:

void clear_a (struct a *pt) {
  pt.b = 0;
  pt.c = 0.0;
}

А вот передавать в функцию уже по ссылке.

по указателю

1 лайк

Да, совершенно верно!
Но надо будет перечитать ссылки/указатели всё-таки… )

тогда уж

void clear_a (struct a *pt) {
  pt->b = 0;
  pt->c = 0.0;
}

не совсем пойму (struct a *pt)…

а так?

struct a {
  int b;
  float c;
}

void clear_a (struct a *pt) {
  pt->b = 0;
  pt->c = 0.0;
}

а вызывать так

clear_a(a);

1 лайк

Голова другим забита сейчас…

Вот так еще попробуй…))

void clear_a (struct a *pt) {
  *pt.b = 0;
  *pt.c = 0.0;
}

invalid type argument of unary ‘*’ (have ‘int’)…

первый вариант проходит , но при вызове функции ругается incompatible type for argument 1 of ‘clear_a’

//  HAL_Delay(5000);
//  }
 clear_a(a);
 input_sort(profil_f);

//WRITE_EE(0,uint8_t my[1]);

Во, чтобы точка осталась ))

void clear_a (struct a *pt) {
  (*pt).b = 0;
  (*pt).c = 0.0;
}

Что на что ругается я не понял.
Приведи минимальный код и полное сообщение компилятора.

Вы опять спешите :frowning: . Привыкайте пробовать скомпилировать, прежде, чем выкладывать.

Да, прошу прощения.
Голова другим забита, просто пытаюсь (отвлекаясь на форум) немного мысли «очистить»… (

1 лайк

Сорри , вызывать так
clear_a(&a)

2 лайка

Да , так работает … Спасибо…
только я все равно не понял, чем оно лучше , чем

void my_clear(void){
 uint8_t kod=0;
	uint8_t nn=0;
	uint8_t oldnn=0;
	uint8_t pages=0;
	uint8_t oldpages=0;
	uint8_t stat=0;
    uint8_t buff_alf=0;
    uint16_t XX=0;
	uint16_t YY=0;
	uint16_t XXOLD=0;
	uint16_t YYOLD=0;
  char text_buf[0]='\0';
 char oldtextbuf[0]='\0';
}

my_clear();

Любую переменную типа “a” (структуры) можно обнулить.
А в твоем коде и структура не фигурирует вообще (обнуляешь локальные переменные функции при их создании, после выхода из функции - они будут уничтожены. То есть бессмысленный код.)…

1 лайк

Э… структура глобальна , раз я ее поля вижу в прерывании . почему при выходе из функции они уничтожаться…?
и самая главная проблема то осталась …:slight_smile:

 void clear_a (struct a *pt) {
	     (*pt).b = 0;
	     (*pt).c = 0.0;
	     (*pt).d='\0';
	   };

не как не хочет

struct a {
	     int b;
	     float c;
	     char  d[20];
	   };

сорри
конечно

void my_clear(void){
 my_touch. kod=0;
 my_touch. kod=0;
 my_touch. oldnn=0;
 my_touch. pages=0;
 my_touch. oldpages=0;
 my_touch. stat=0;
 my_touch. buff_alf=0;
 my_touch. XX=0;
 my_touch. YY=0;
 my_touch. XXOLD=0;
 my_touch. YYOLD=0;
 my_touch. text_buf[0]='\0';
 my_touch. oldtextbuf[0]='\0';
}

my_clear();

а… пардон я слеп… работает