Wpis z mikrobloga

#programowanie #cpp #c #elektronika

Jak to się liczyło te wskaźniki? Poniższy kod ma prawo działać?
Wychodzę z założenia że inkrementuję wskaźnik aż dotrę do NULLa kończącego ciąg znaków.

void UART_print(const uint8_t *str) {
while(*str++)
UART_putc(*str);
}
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@m8se: Zinkrementuje :) Najpierw przetestuje while(*str) (czyli sprawdzi czy wartość w arrayu jest 0, a potem zinkrementuje pointer. Tylko że zinkrementuje wartość zanim UART_putc zadziała więc tak jak @KrzaQ2 mówi nie wydrukuje pierwszego
  • Odpowiedz
@RARvolt: to jest taki "sprytny" zapis, rozbij to na opreację

while (*str) { bo patrzysz na znak wskazywany
put_c( *str ) bo używasz znaku wskazywanego
++ str; samo str, bo tu pracujesz naprawdę na adresie pamięci (aby go zwiększyć) a nie na jakimś znaku np na literze A. ++(*str) by zwiększało wskazywaną aktualnie literę np literę A na B.
  • Odpowiedz
Typo, oczywiście ma być while (*str)

while (str) { bo patrzysz na znak wskazywany


by powtarzał dopóki adres pamięci nie jest zerowy.

No, pora iść spać ʕʔ
  • Odpowiedz