Výmena dvoch ukazovateľov – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výmena dvoch ukazovateľov – C / C++ – Fórum – Programujte.comVýmena dvoch ukazovateľov – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Kent0
Stálý člen
7. 11. 2013   #1
-
0
-

Ahojte,

potreboval by som poradiť s funkciou, ktorá má vymeniť dva ukazovatele,

void vymen(void **p1,void **p2)
{
	void *pom;
	pom=*p1;
	*p1=*p2;
	*p2=pom;
}

int main()
{
	int a,b;
	scanf("%d %d",&a,&b);
	int *p_1=&a;
	int *p_2=&b;
	vymen(*p_1,*p_2);
	getchar();
	return 0;
}

takto nejako som to skúsil ale nechce mi to ísť.

Za každú radu budem vďačný 

Nahlásit jako SPAM
IP: 178.253.132.–
KIIV
~ Moderátor
+43
God of flame
7. 11. 2013   #2
-
0
-

a uz si studoval jak se ziskava adresa, kde je promenna ulozena? A jak se ziskava hodnota pointeru? (pak mozna uvidis tu svoji chybu)

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Robo
~ Anonymní uživatel
82 příspěvků
7. 11. 2013   #3
-
0
-

#1 Kent
No po prvé, ti máš vo funkcii ukazovateľ na ukazovateľ a nie obyčajný ukazovateľ. 
Ďalšia vec je tá, že vo funkcii prijímaš ukazovateľ na void ale posielaš tam adresu typu int.  
A je zbytočné vytvárať ďalší ukazovateľ na a, kedže tvoj program to nepotrebuje. Do funckie môžeš rovno poslať adresu premennej a.
 

Takže zmeň funkciu na
 

void vymen(int *p1, int *p2) {     int pom;

    pom = *p1;     *p1 = *p2;     *p2 = pom; }

int main() {     int a,b;     scanf("%d %d",&a,&b);     vymen(&a,&b);     getchar();     return 0; }

Nahlásit jako SPAM
IP: 178.253.138.–
Robo
~ Anonymní uživatel
82 příspěvků
7. 11. 2013   #4
-
0
-

nejako jebnuto to sem vložilo. Ale šak vyčítaš z toho dačo

Nahlásit jako SPAM
IP: 178.253.138.–
Kent0
Stálý člen
7. 11. 2013   #5
-
0
-

#3 Robo
tento spôsob mám hotový..len ja som to chcel skúsiť aj tým druhým, že budem mať vo funkcii ukazovateľ na ukazovateľ :) 

Nahlásit jako SPAM
IP: 178.253.132.–
Kent0
Stálý člen
7. 11. 2013   #6
-
0
-

#2 KIIV
skusil som to este takto ale stale mi to nejde 

void vymen(void **p1,void **p2)
{
	void *pom;
	pom=*p1;
	*p1=*p2;
	*p2=pom;
}

int main()
{
	int a,b,*p_1=&a,*p_2=&b;
	scanf("%d %d",&a,&b);
	
	vymen((void*)&p_1,(void*)&p_2);
	getchar();
	return 0;
}
Nahlásit jako SPAM
IP: 178.253.132.–
KIIV
~ Moderátor
+43
God of flame
7. 11. 2013   #7
-
0
-

#6 Kent
uz tam mas jen blbe to pretypovani... pocet hvezd musi tak nejak souhlasit s prototypem

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kent0
Stálý člen
7. 11. 2013   #8
-
0
-

#7 KIIV

#include <stdio.h>
void vymen(void **p1,void **p2)
{
	void *pom;
	pom=*p1;
	*p1=*p2;
	*p2=pom;
}

int main()
{
	int a,b,*p_1=&a,*p_2=&b;
	scanf("%d %d",&a,&b);
	
	vymen((void**)&p_1,(void**)&p_2);
	getchar();
	return 0;
}

Ďakujem za rady :)

Nahlásit jako SPAM
IP: 178.253.132.–
Robo
~ Anonymní uživatel
82 příspěvků
7. 11. 2013   #9
-
0
-

#5 Kent
Nevidím preto využitie, kedže ukazovateľ na ukazovateľ sa používa pre dynamické matice. A Aj tak v tej funkcii pracuješ len s obyčajným ukazovateľom. A to čo chceš ty sa ani nedá spraviť. Lebo aj keď by si si vytvoril dva samostatne ukazovatele a poprepájal ich, tak stále to bude ukazovať len na tú premennú a a bude to obyčajný ukazovateľ. Keď ty z niečoho spravíš **p1 tak je to defakto matica

Nahlásit jako SPAM
IP: 178.253.138.–
KIIV
~ Moderátor
+43
God of flame
7. 11. 2013   #10
-
0
-

#9 Robo
tak teoreticky by to mohl pouzit pro serazeni neceho s vetsim mnozstvim dat na jednu polozku (treba vetsi strukturu - prohazovat nekde ty, tak to bude docela sranda)

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kent0
Stálý člen
7. 11. 2013   #11
-
0
-

#9 Robo
Mne momentálne nejde o využitie ale o pochopenie ukazovateľov. Ale ďakujem za upozornenie :)

Nahlásit jako SPAM
IP: 178.253.132.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Výmena prvkov — založil Berri

Vymena hodnot v poli — založil Onsi

Vyměna znaku za událost — založil Mutagen

Vymena bodu za predmety — založil pepa

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý