Is the pointer to the array – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Is the pointer to the array – .NET – Fórum – Programujte.comIs the pointer to the array – .NET – Fórum – Programujte.com

 

Montezo
~ Anonymní uživatel
188 příspěvků
24. 12. 2021   #1
-
0
-

https://docs.microsoft.com/en-us/dotnet/csharp/methods

Hmmm. Takže pointa je, že při předávání hodnotou předám např z "int vanocka = 50" tu hodnotu "-50" a od té doby už tu vánočku nepotřebuju, zatímco při předávání referencema jde o to, že jen předám to označení proměnné "vanocka", a proto např se může stát, že v případě "když cukrovi bude mít hodnotu 10, a já napíšu "cukrovi +=vanocka", tak pak to cukrovi získá hodnotu 60, ale kdyby následně proběhla změna hodnoty proměnné vanocka, tak se i změní ten "výpočet"?

Nahlásit jako SPAM
IP: 178.255.168.–
peter
~ Anonymní uživatel
4016 příspěvků
24. 12. 2021   #2
-
0
-

 ... pouziji jiny jazyk, lae na ukazku by to mohlo stacit...

promena = 123
pole[3] = 123; # reference = 3
pole['vanocka'] = 123 # reference = 'vanocka'

vanocka = 50
cukrovi = 0
cukrovi += vanocka
cukrovi = 0
cukrovi = cukrovi + vanocka # cukrovi = 0 + 50 = +50

vanocka = -50
cukrovi = 0cukrovi = cukrovi + vanocka # cukrovi = 0 + -50 = -50

vanocka = -50
cukrovi = 0
if (vanocka>0)
    {
    cukrovi = cukrovi + vanocka # cukrovi = 0 + 50 = +50
    }

---

pole_cukrovi = []

pole_cukrovi['vanocka'] = 50

moje_reference = 'vanocka'
pole_cukrovi[moje_reference] = 30

Jakekoliv vypocty probihaji, kdyz je provedes. Todle neni excel, ze vypocitava vsechny bunky naraz. tady pises program, radek po radku.

Treba, kdyz mas databazi pracovniku, tak pouzivas jako referenci cislo radku a jmeno sloupce.

pracovnici = [
  [0, 'jenda', 'praha'],
  [1, 'tomas', 'brno']
];

vypis( pracovnici[1][1] ) # 'tomas'

row_id = 0
col_id = 2
vypis( pracovnici[row_id][col_id] ) # 'praha'

---
pracovnici = [
  ['row_id': 0, 'jmeno': 'jenda', 'mesto': 'praha'],
  ['row_id': 1, 'jmeno': 'tomas', 'mesto': 'brno']
];

row_id = 0
col_id = 'jmeno'
vypis( pracovnici[row_id][col_id] ) # 'jenda'
Nahlásit jako SPAM
IP: 90.176.141.–
peter
~ Anonymní uživatel
4016 příspěvků
24. 12. 2021   #3
-
0
-

 mala oprava, doplneni...

vanocka = -50
cukrovi = 0
if (vanocka>0) # pokud je vanocka>0, tak je pridej k cukrovi
    {
    cukrovi = cukrovi + vanocka
    }
# a protoze je zaporne, tak bude cukrovi stale 0
Nahlásit jako SPAM
IP: 90.176.141.–
gna
~ Anonymní uživatel
1891 příspěvků
24. 12. 2021   #4
-
0
-

Při předání hodnotou, je parametr jako lokální proměnná metody. Při předání odkazem, je ten parametr odkaz na předávanou proměnnou. 

void byval(int param)
{
    // parametr je hodnota, zmeni se jen lokalni hodnota param
    param += 50;
}
void byref(ref int param)
{
    // parametr je odkaz, zmeni se hodnota, na kterou odkazuje
    param += 50;
}

int hodnota = 10;

byval(hodnota);
Console.WriteLine("hodnota {0}", hodnota); // 10

byref(ref hodnota);
Console.WriteLine("hodnota {0}", hodnota); // 60

Co se týče té vánočky, tak příkaz += není nějaká definice vazby. Je to příkaz, který se provede a šmitec. 

// k hodnote `cukrovi` se pricte hodnota `vanocka`
cukrovi += vanocka;

// toto uz se `cukrovi` nijak netyka
// (teoreticky `vanocka` muze byt reference na `cukrovi`, ale dejme tomu, ze neni)
vanocka = 123;

A ta pasáž o tom, že pole je pointer, je ještě o něčem trochu jiném. Tam píšou, že když hodnotou předáváš pole (nebo jiný referenční typ), tak sice předáváš parametr hodnotou, ale ta hodnota je odkaz :-) 

void arr1(int[] param)
{
    // opet jen lokalni zmena
    param = new int[] {4, 5, 6};
}

void arr2(int[] param)
{
    // tady nemenim param, ale jeho obsah, tj. data, na ktere odkazuje
    param[0] = 4;
}

int[] pole = new int[] { 1, 2, 3 };

arr1(pole);
Console.WriteLine("hodnota {0}", pole[0]); // 1

arr2(pole);
Console.WriteLine("hodnota {0}", pole[0]); // 4
Nahlásit jako SPAM
IP: 213.211.51.–
BDS+3
Věrný člen
25. 12. 2021   #5
-
0
-

#1 Montezo
Proč si neuděláš test, jestli se to změní nebo ne???

Nezabralo by ti to ani minutu.

Nahlásit jako SPAM
IP: 185.69.68.–
W11 :)
Mutagen
~ Anonymní uživatel
549 příspěvků
26. 12. 2021   #6
-
0
-

#5 BDS
Jemu bohužel by to zabralo věčnost, proto radši napíše sem.

Nahlásit jako SPAM
IP: 91.237.237.–
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, 14 hostů

Podobná vlákna

Pointer na char array — založil oxidián

* pointer — založil Honza

Pointer na char — založil _Radek_

Delete na pointer — založil Kolemjdouci

 

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