Avatar
ivan.miso
Člen
Avatar
ivan.miso:

Zdravim.chcem sa spytat.ked priradim adresu funkcie k pointeru na tuto funkciu:
Int(*p_fint)();
Funkcia sa vola sucet,ktora je predtym definovana.
p_fint = sucet;
Preco ked si vypisem adresu funkcie a hodnotu p_fint, tak mi na obidve vyhodi adresu p_fint,ale ked si takto isto priradim premennu k pointeru tak je to ok.

Som tu novy,stale sa len ucim programovat, tak ak sa pytam zle, opravte ma.ďakujem

 
Odpovědět 3.2.2015 20:54
Avatar
David.Landa
Člen
Avatar
David.Landa:

Můžeš to prosím ještě trochu vysvětlit a ukázat (zformátovaný prosím) nějaký souvislejší kus kódu?

Editováno 4.2.2015 15:16
 
Nahoru Odpovědět 4.2.2015 15:15
Avatar
ivan.miso
Člen
Avatar
Odpovídá na David.Landa
ivan.miso:

#include <stdio.h>
#include <stdlib.h>

int sucet(int a, int b)
{
return (a + b);
}

int main(void)
{
int(*p_fint)(int, int);
int prve, druhe;

printf("napis 2 cele cisla:\n");
scanf("%d %d", &prve, &druhe);

p_fint = sucet;

printf("sucet dvoch cisel je %d\n"
"adresa funkcie sucet je %p\n"
"hodnota pointeru p_fint je %p\n", p_fint(prve, druhe), sucet, p_fint);

system("pause");
return 0;
}

 
Nahoru Odpovědět 4.2.2015 20:53
Avatar
ivan.miso
Člen
Avatar
Odpovídá na ivan.miso
ivan.miso:

p_fint = sucet; v tomto riadku by sa mala adresa funkcie priradit do pointeru ale ked si vypisem hodnoty v printf tak pre sucet aj pre p_fint by mala byt hodnota adresa suctu, spravne?

v tomto riadku int(*p_fint)(int, int); som musel dat int, int inak mi to vyhadzovalo chybu c2440 tusim. pouzivam microsoft visual studio 2013l

 
Nahoru Odpovědět 4.2.2015 21:01
Avatar
Odpovídá na ivan.miso
Lukáš Hruda (Luckin):

Však obě ty vypsané adresy jsou stejné, v čem je problém?

 
Nahoru Odpovědět 4.2.2015 21:53
Avatar
David.Landa
Člen
Avatar
Odpovídá na ivan.miso
David.Landa:

Ukazatel na funkci inicializuješ správně: pak to to vypíše součet a hodnotu ukazatele a adresu funkce -- obě stejné (např. 0x40062d), jak bys očekával, kde je chyba? Možná chceš něco jiného, ale syntakticky je program správně -- kompiluj s příznaky (flags):

gcc test.c -o test -Wall -Wextra -Werror

Formátuj ten kód -- je na to čudlík .)

Editováno 4.2.2015 22:13
 
Nahoru Odpovědět 4.2.2015 22:10
Avatar
David.Landa
Člen
Avatar
Odpovídá na ivan.miso
David.Landa:

Nepoužívej

system("pause")

-- It's not portable!

 
Nahoru Odpovědět 4.2.2015 22:16
Avatar
Nahoru Odpovědět 5.2.2015 10:16
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David.Landa
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
David.Landa:

Pleteš pojmy adresa a hodnota ukazatele. Adresa ukazatele není jak píšeš v příkladu, to je hodnota kterou ukazatel uchovává -- ukazatel je normální proměnná, adresu ukazatele dostaneš takto:

printf("address of pointer is: 0x%0X\n", (unsigned)&p);
Editováno 5.2.2015 15:53
 
Nahoru Odpovědět 5.2.2015 15:51
Avatar
ivan.miso
Člen
Avatar
Odpovídá na David.Landa
ivan.miso:

skusim vam to ukazat: adresa icka sa priradi do hodnoty pointera, ten teda ukazuje na icko(sam pointer ma ale vlastnu adresu tu ale na obrazku nevidim ze????, ), ked si to v printf vypisem pomocou %p ukaze mi rovnake hodnoty, DOBRE TO CHAPEM????
potom vam ukazem vo to ukazem vo funkcii, tam to mam inak.

system("pause"); pouzivam lebo nechcem aby mi hned zavrelo okno.

 
Nahoru Odpovědět 10.2.2015 12:13
Avatar
David.Landa
Člen
Avatar
David.Landa:

Jo, já sem odpovídal na předřečníka -- myslím, že to chápeš:
ukazatel je proměnná, která jako hodnotu uchovává adresu jiného objektu (proměnné atd.). Ale protože je sám proměnnou, musí mít také nějakou adresu.
Však to chápeš. Předřečník ve screenshotu píše: adresa pointera... -- ale to je hodnota, kterou uchovává, nikoliv jeho adresa.

 
Nahoru Odpovědět 10.2.2015 12:33
Avatar
David.Landa
Člen
Avatar
Odpovídá na David.Landa
David.Landa:

ivan.miso Doporučím ti naučit se kompilovat z řádky, pro jednoduché příklady je to ideální a ještě se spoustu naučíš.

Editováno 10.2.2015 12:36
 
Nahoru Odpovědět 10.2.2015 12:35
Avatar
ivan.miso
Člen
Avatar
Odpovídá na David.Landa
ivan.miso:

co myslis tym kompilovat z radky, cecko sa ucim viac menej sam, dakujem za kazku radu, zajtra napisem ako mi to ukazuje pointer na fuknciu , tam my to ukazuje inak, pointer na premennu teda chapem, zatial dakujem za ochotu.idem do prace

 
Nahoru Odpovědět 10.2.2015 12:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.