• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie Język C

Object Storage Arubacloud
0 głosów
233 wizyt
pytanie zadane 29 sierpnia 2022 w C i C++ przez benny13 Obywatel (1,150 p.)

Witam, mam pytanie dotyczące następującego zadania w języku C.

Jakie wartości wypisze następujący program?

#include <stdio.h>
void f(long *p1, long *p2, long x){
while(p1!=p2){
if( *p1>x)printf("%ld\n", *p1);
++p1;
}
}
int main(void){
long a[15]={5, 9, 6, 1, 7, 4, 8, 2, 1, 3, 7, 6, 5, 1, 9};
f(a+2, a+11, 5);
return 0;
}

Czemu w powyższym przypadku program wypisuje wartości 6,7,8,7 skoro warunkiem pętli while jest różna wartość p1 oraz p2, natomiast są one równe 6. Proszę o pomoc, z góry dziękuję :)

1 odpowiedź

+1 głos
odpowiedź 29 sierpnia 2022 przez Whiskey_Taster Pasjonat (15,610 p.)
wybrane 29 sierpnia 2022 przez benny13
 
Najlepsza

Zmiłuj się. Jak już wrzucasz kod, to przynajmniej go sformatuj - dla naszej wygody i zwiększenia szansy na odpowiedź. 

#include <stdio.h>
void f(long* p1, long* p2, long x) {
	while (p1 != p2) {
		if (*p1 > x)printf("%ld\n", *p1);
		++p1;
	}
}
int main(void) {
	long a[15] = { 5, 9, 6, 1, 7, 4, 8, 2, 1, 3, 7, 6, 5, 1, 9 };
	f(a + 2, a + 11, 5);
	return 0;
}

p1 oraz p2 to wskaźniki. Więc porównujemy tak naprawdę adresy, a nie ich wartości. Mogą mieć te same wartości, ale będą one pod innymi adresami, stąd warunek jest spełniony. W programie zmodyfikuj sobie wyświetlanie tak, by wyświetlało Ci wartość wskaźnika (a nie element, na który wskazuje) i szybko zauważysz, o co chodzi. 

komentarz 29 sierpnia 2022 przez benny13 Obywatel (1,150 p.)
Przepraszam, już będę formatował kod, nie pomyślałem o tym. Dziękuję za pomoc, o to mi właśnie chodziło, myślałem, że chodzi o wartości a nie dostrzegłem braku symbolu dereferencji...
1
komentarz 29 sierpnia 2022 przez Whiskey_Taster Pasjonat (15,610 p.)
Do formatowania, to wystarczy, że nawet w VisualStudio wrzucisz i sam to zrobi (czy tam inne IDE, w którym pracujesz), a potem przeklejasz tutaj i gotowe.

Taka rada ode mnie - debugowanie. Debugowanie dużo daje - IDE są w stanie pokazać na bieżąco adres danej zmiennej czy wskaźnika, wartości jaka się w niej znajduje i wiele więcej. Ewentualnie, przy mniejszych rzeczach można też to zrobić trochę prymitywnie - czyli właśnie poprzez wypisywanie do konsoli wartości, by móc sobie prześledzić pewne rzeczy.
komentarz 29 sierpnia 2022 przez benny13 Obywatel (1,150 p.)
Dzięki za te pomocne rady, na pewno się do nich zastosuję :)

Podobne pytania

0 głosów
1 odpowiedź 428 wizyt
pytanie zadane 31 sierpnia 2022 w C i C++ przez benny13 Obywatel (1,150 p.)
0 głosów
1 odpowiedź 201 wizyt
pytanie zadane 30 sierpnia 2022 w C i C++ przez benny13 Obywatel (1,150 p.)
0 głosów
2 odpowiedzi 270 wizyt
pytanie zadane 8 czerwca 2023 w C i C++ przez whiteman808 Obywatel (1,820 p.)

92,543 zapytań

141,385 odpowiedzi

319,492 komentarzy

61,929 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...