Názory ke článku C++ - 9. lekce
Tak tohle už asi nikdy nepochopim... Divim se , že sem se dostal tak daleko, ale tohle je na mě moc...
A prečo by si to nemal pochopiť? Čo je na tom také, aby si to naozaj nedokázal pochopiť? Aj keď uznávam, može to byť trocha náročné, pokiaľ nevieš, ako je rozdelena pamať RAM. Je to takto:
* Globálny obor platnosti
* Hromada
* Registre
* Priestor pre kod
* Voľné úložisko
Keď vytvoríš ukazatel, ukaze práve niekam do Voľného úložiska. O ostatných častiach pamate by sa dalo písať ešte veľa, preto si to skús nájsť na nete, napr. na google.com
teme ukazatelov ktora bola rozobrata v tejto lekcii chapem a nemam s tym problem dokonca by som chcel podakovat lebo v skole v pascali nam povedali preberte si to samy a ked som videl tri strany latky tak som sa na to vykaslal. ale nie o tom som chcel.
mam 2 otazky
1/ co je to <u>alokacia</u> pamate?
2/ ake je prakticke vyuzitie ukazateloch?
za odpoved vopred dik
1/ alokace pameti je vytvoreni urciteho useku (zamluveni) a pripravenost k pouziti.. velmi laicky.. Proste zamluveni urcite velikosti pameti..
2/ dynamicke pridelovani pameti = setri pamet, pouziva se, protoze jinak bys na zacatku programu zamluvil hodne pameti, coz samozrejme neni dobre.. tak se pouziva pamet efektivne(jen kdyz je treba).
9. 12. 2006
to pretipovanie sa mi dako nezda pri tom
int *pi;
pi = (int * ) 08x000000; // adresa je zanedbatelna
lebo to vlastne nepretipoval kedze pointer pi uz malo typ(int) vo vrchnom riadku...nemalo tam byt (char * )??
6. 8. 2007
Omlouvam se, nejde mi prihlasit ... ale i tak potrebuju pomoct, nevim, jestli sem jsem dobre pochopil ukazatele -> jestli jsem spravne vypracoval ukol (aspon dle bodu..).
#include <iostream>
using namespace std;
int main()
{
int cislo1 = 0;
int cislo2 = 0;
int cislo3 = 0;
int cislo4 = 0;
int cislo5 = 0;
int cislo6 = 4;
int cislo7 = 6;
int cislo8 = 2;
int cislo9 = 7;
int cislo10 = 1;
///////////////
cout << cislo1 << endl << cislo2 << endl << cislo3 << endl << cislo4 << endl << cislo5 << endl <<endl;
///////////////
int *cislo11 = &cislo6;
int *cislo12 = &cislo7;
int *cislo13 = &cislo8;
int *cislo14 = &cislo9;
int *cislo15 = &cislo10;
cout << *cislo11 << endl << *cislo12 << endl << *cislo13 << endl << *cislo14 << endl << *cislo15 << endl <<endl;
///////////////
cout << "Zadejte cislo, o ktere se ma zvysit/snizit petice cisel: ";
int prom;
cin >> prom;
*cislo11 = *cislo11 + prom;
*cislo12 = *cislo12 + prom;
*cislo13 = *cislo13 + prom;
*cislo14 = *cislo14 + prom;
*cislo15 = *cislo15 + prom;
cout << *cislo11 << endl << *cislo12 << endl << *cislo13 << endl << *cislo14 << endl << *cislo15 << endl;
///////////////
cin.get();
cin.get();
return 0;
}
Chyba Ti na konci vypis adries a inac to mas dobre, akurat si sa nedrzal presne zadania.
Toto som dal dohromady ja, ale tiez neviem, ci mam vsetko dobre:
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a[]={0,0,0,0,0},i,c;
int *b[5];
for(i=0;i<5;i++){
cout<<"a["<<i<<"] = "<<a[i]<<endl;
b[i]=&a[i];
*b[i]=i;}
cout<<"\n";
for(i=0;i<5;i++)
cout<<"a["<<i<<"] = "<<a[i]<<endl;
cout<<"Zadaj cislo, ktore sa prirata\n";
cin>>c;
for(i=0;i<5;i++)
*b[i]+=+c;
for(i=0;i<5;i++)
cout<<a[i]<<" "<<&a[i]<<" "<<*b[i]<<" "<<b[i]<<endl;
system("pause");
return 0;
}
25. 7. 2010
Ukazatelé mě také zpočátku odradily od C++,přitom je to tak jednoduché,každý kdo kdy dělal na PC používá a vytváří ukazatele každou chvíli aniž o tom ví.Prostě a jednoduše ukazatel je zástupce.A tak se s ním i pracuje,zástupce na ploše vašeho desktopu funguje úplně stejně jako ukazatel,odkazuje na umístnění souboru tak jako ukazatel ukazuje na danou proměnnou.Myslím že by proto byl pro ukazatel vhodnější název zástupce.
Reagoval na komentář od uživatele dannero :
Souhlasim, ze stejneho duvodu sem se venoval jinym programovacim jazykum a az ted, kdyz me maturita donutila pochopit ukazatele, mi neprijde zas az tak tezke to neni , dekuji za clanek a za vhodne prirovnani od uzivatele dannero :)
Tady je moje verze.
int main()
{
int cislo[5] = {0,0,0,0,0};
for (int i=0; i<5; i++)
{
cout << i+1 << ". cislo je: " << cislo[i] << endl;
}
int *ukaz[5];
cout << endl;
for (int i=0; i<5; i++)
{
ukaz[i] = &cislo[i];
*ukaz[i] = i+1;
cout << "Nyni je " << i+1 << ". cislo: " << cislo[i] << endl;
}
cout << endl << "Zadejte jedno cislo ktere se bude pricitat: ";
int temp;
cin >> temp;
for (int i=0; i<5; i++)
{
*ukaz[i] += temp;
cout << "Nyni je " << i+1 << ". cislo: " << cislo[i] << endl;
}
cout << endl;
for (int i=0; i<5; i++)
{
cout << "Adresa " << i+1 << ". cisla je: " << &cislo[i] << endl;
}
cin.get();
cin.get();
return 0;
}
Zdravím napsal jsem to ale chci se zeptat jestli to mám správně protoze nevim jestli sjem to pochopil :-)
#include <iostream>
using namespace std;
int main()
{
int cislo1 = 0;
int cislo2 = 0;
int cislo3 = 0;
int cislo4 = 0;
int cislo5 = 0;
cout<<"Cislo 1 : "<<cislo1<<endl;
cout<<"Cislo 2 : "<<cislo2<<endl;
cout<<"Cislo 3 : "<<cislo3<<endl;
cout<<"Cislo 4 : "<<cislo4<<endl;
cout<<"Cislo 5 : "<<cislo5<<endl;
int *a=&cislo1;
int *b=&cislo2;
int *c=&cislo3;
int *d=&cislo4;
int *e=&cislo5;
*a=10;
*b=16;
*c=25;
*d=12;
*e=14;
cout<<endl;
cout<<"Cislo 1 : "<<cislo1<<endl;
cout<<"Cislo 2 : "<<cislo2<<endl;
cout<<"Cislo 3 : "<<cislo3<<endl;
cout<<"Cislo 4 : "<<cislo4<<endl;
cout<<"Cislo 5 : "<<cislo5<<endl;
cout<<endl<<"Zadejte cislo : ";
int x;
cin>>x;
*a=10*x;
*b=16*x;
*c=25*x;
*d=12*x;
*e=14*x;
cout<<endl;
cout<<"Cislo 1 : "<<cislo1<<endl;
cout<<"Cislo 2 : "<<cislo2<<endl;
cout<<"Cislo 3 : "<<cislo3<<endl;
cout<<"Cislo 4 : "<<cislo4<<endl;
cout<<"Cislo 5 : "<<cislo5<<endl;
cout<<endl;
cout<<"Cislo 1 : "<<&cislo1<<endl;
cout<<"Cislo 2 : "<<&cislo2<<endl;
cout<<"Cislo 3 : "<<&cislo3<<endl;
cout<<"Cislo 4 : "<<&cislo4<<endl;
cout<<"Cislo 5 : "<<&cislo5<<endl;
system("pause");
return 0;
}
5. 4. 2013
Tu je moja verzia. Myslím, že by to malo byť v poriadku.
#include<iostream>
using namespace std;
int main(){
int *ukazovatel1;
int *ukazovatel2;
int *ukazovatel3;
int *ukazovatel4;
int *ukazovatel5;
int a,b,c,d,e;
cout<<"Zadaj prve cislo:";
cin>>a;
cout<<"Zadaj druhe cislo:";
cin>>b;
cout<<"Zadaj tretie cislo:";
cin>>c;
cout<<"Zadaj strvte cislo:";
cin>>d;
cout<<"Zadaj piate cislo:";
cin>>e;
cout<<endl<<"Adresy zadanych cisel:"<<endl<<&a<<endl<<&b<<endl<<&c<<endl<<&d<<endl<<&e<<endl<<endl;
ukazovatel1=&a;
ukazovatel2=&b;
ukazovatel3=&c;
ukazovatel4=&d;
ukazovatel5=&e;
cout<<"Ukazovatele ukazuju na adresy:"<<endl<<ukazovatel1<<endl<<ukazovatel2<<endl<<ukazovatel3<<endl<<ukazovatel4<<endl<<ukazovatel5<<endl;
*ukazovatel1=*ukazovatel1+5;
*ukazovatel2=*ukazovatel2+6;
*ukazovatel3=*ukazovatel3+8;
*ukazovatel4=*ukazovatel4+1;
*ukazovatel5=*ukazovatel5+5;
cout<<endl<<"Zadane cisla zmenene cez ukazovatele su:"<<endl<<a<<endl<<b<<endl<<c<<endl<<d<<endl<<e<<endl<<endl;
cout<<"Zadaj cislo, ktore ma byt pripocitane k cez ukazovatele:";
int cislo;
cin>>cislo;
*ukazovatel1=*ukazovatel1+cislo;
*ukazovatel2=*ukazovatel2+cislo;
*ukazovatel3=*ukazovatel3+cislo;
*ukazovatel4=*ukazovatel4+cislo;
*ukazovatel5=*ukazovatel5+cislo;
cout<<endl<<"Zmenene cisla pripocitanim zadaneho cisla cez ukazovatela su:"<<endl<<a<<endl<<b<<endl<<c<<endl<<d<<endl<<e<<endl<<endl;
return 0;
}
#include <iostream>
using namespace std;
int promenna[5]={0,0,0,0,0};
int *u1=&promenna[0];
int *u2=&promenna[1];
int *u3=&promenna[2];
int *u4=&promenna[3];
int *u5=&promenna[4];
int main()
{
for (int i = 0; i<5; i++)
cout<<"cislo: "<<i+1<<" = "<<promenna[i]<<endl;
cout<<endl;
*u1=5;
*u2=6;
*u3=8;
*u4=1;
*u5=5;
for (int i = 0; i<5; i++)
cout<<"cislo: "<<i+1<<" = "<<promenna[i]<<endl;
cout<<endl<<"Zadejte cislo : ";
int cislo=NULL;
cin>>cislo;
cout<<endl;
*u1+=cislo;
*u2+=cislo;
*u3+=cislo;
*u4+=cislo;
*u5+=cislo;
for (int i = 0; i<5; i++)
cout<<"cislo: "<<i+1<<" = "<<promenna[i]<<endl;
cout<<endl;
for (int i = 0; i<5; i++)
cout<<"adresa cisla: "<<i+1<<" = "<<&promenna[i]<<endl;
cin.get();
cin.get();
return EXIT_SUCCESS;
}
29. 11. 2020
#include <iostream>
using namespace std;
/*
Vytvořte 5 proměnných a zrovna inicializujte na samé nuly. Necháte vypsat. Poté ke každé z nich
vytvoříte jednoho ukazatele a pomocí nich změníte postupně hodnoty původních proměnných. Necháte
vypsat. Nakonec necháte, aby uživatel zadal 1 číslo a o toto číslo se zvětší všechny hodnoty,
avšak přes ukazatele! A úplně nakonec vypíšete postupně u každého čísla jeho adresu.
*/
/*Příklad výsledku:
1. cislo = 0
2. cislo = 0
3. cislo = 0
4. cislo = 0
5. cislo = 0
1. cislo = 5
2. cislo = 6
3. cislo = 8
4. cislo = 1
5. cislo = 5
zadej cislo : 5
1. cislo = 10
2. cislo = 11
3. cislo = 13
4. cislo = 6
5. cislo = 10
*/
int main()
{
// vytvoření pěti proměnných a jejich inicializace na 0
int p1 = 0;
int p2 = 0;
int p3 = 0;
int p4 = 0;
int p5 = 0;
cout << "p1 =" << p1 << endl << "p2 =" << p2 << endl << "p3 =" << p3 << endl << "p4 =" << p4 << endl << "p5 =" << p5 << endl << endl;
//vytvoření pěti ukazatelů a přiřazení adres jednotlivých proměnných
int* uk_p1 = &p1;
int* uk_p2 = &p2;
int* uk_p3 = &p3;
int* uk_p4 = &p4;
int* uk_p5 = &p5;
//změna hodnoty původních proměnných pomoci ukazatelů
*uk_p1 = 5;
*uk_p2 = 6;
*uk_p3 = 8;
*uk_p4 = 1;
*uk_p5 = 3;
cout << "p1 =" << p1 << endl << "p2 =" << p2 << endl << "p3 =" << p3 << endl << "p4 =" << p4 << endl << "p5 =" << p5 << endl << endl;
//vstup uživatele - neni nijak ošetřen proti blbosti uživatele
cout << "Zsdej libovolné celé čislo: ";
int vstup;
cin >> vstup;
//zvětšení hodnot proměnných o zadané číslo uživatelem
*uk_p1 = 5 + vstup;
*uk_p2 = 6 + vstup;
*uk_p3 = 8 + vstup;
*uk_p4 = 1 + vstup;
*uk_p5 = 3 + vstup;
cout << endl << "p1 =" << p1 << endl << "p2 =" << p2 << endl << "p3 =" << p3 << endl << "p4 =" << p4 << endl << "p5 =" << p5 << endl << endl;
//výpis adres každého čísla
cout << "Adresy ulozenych cisel:" << endl;
cout << "p1 =" << &p1 << endl << "p2 =" << &p2 << endl << "p3 =" << &p3 << endl << "p4 =" << &p4 << endl << "p5 =" << &p5 << endl << endl;
return 0;
}