Instrukcje wyświetlające

0
#include<iostream>
using namespace std;

int main(){
   char c='C';
   int i=2;
   long l=2;
    
//wyświetlanie zawartości zmiennych:
               cout<<c<<" "<<i<<" "<<l<<'\n';
//wyświetlanie adresy zmiennych:
               cout<<&c<<" "<<&i<<" "<<&l<<'\n'; 
    return 0;
};

Czy instrukcje wyświetlające zawartości i adresy zmiennych są dobrze przeze mnie zapisene?

0

tak

0

Dzięki.

//Wyświetlanie adresu zmienych globalnych:
#include<iostream>
using namespace std;
   char c='C';
   int i=2;
   long l=2;
int main(){

    cout<<&c<<" "<<&i<<" "<<&l<<'\n'; 
    
  return 0;
};

//Wyświetlanie adresu zmienych lokalnych:
#include<iostream>
using namespace std;

int main(){
   char c='C';
   int i=2;
   long l=2;

    cout<<&c<<" "<<&i<<" "<<&l<<'\n'; 
    
  return 0;
};

//Wyświetlanie adresu zmienych inicjowanych:
#include<iostream>
using namespace std;

int main(){
    char *c = new char('C');
    int *i = new int(2);
    long *l = new long(2);

    cout<<&c<<" "<<&i<<" "<<&l<<'\n'; 
    
  return 0;
};

Pytanie 1: Czy dobry mam zapis wyświetlania adresu zmiennych globalnych, lokalnych i inicjowanych?
Pytanie 2: Jak jest różnica między adresami zmiennych globalnych, lokalnych i inicjowanych?
dla zmiennych globalnych wyświetla mi: C 0x43f004 0x43f008
dla zmiennych lokalnych: C░ " 0x22ff70 0x22ff6c
dla zmiennych inicjowanych: 0x22ff74 0x22ff70 0x22ff6c

0

Nie. Nie do końca. Adresy zmiennych dynamicznych (alokownaych na stercie) - tych które, nie wiadomo czemu, nazywasz inicjowanymi, to po prostu wartości zapisane pod wskaźnikami (zauważ ze wyciąganie wartości pokazywanej przez wskaźnik wymaga użycia operatora *). Nie musisz używać operatora &.

Różnica jest w tym gdzie te zmienne w pamieci siedzą. Proponuje odpalic program który tworzy wszystkie 3 rodzaje zmiennych i wypisuje ich adresy. Adresy zmiennych globalnych będą inne niż lokalnych i inne niż stertowych (ale w każdej z grup adresy będą "blisko siebie" - przynajmniej względnie blisko, bo akurat na stercie może być różnie).

0

Zrobiłem tak i wyświetliło mi takie adresy:
dla zmiennych globalnych wyświetla mi: C 0x43f004 0x43f008
dla zmiennych lokalnych: C░ " 0x22ff70 0x22ff6c
dla zmiennych inicjowanych: 0x22ff74 0x22ff70 0x22ff6c

0

Pokaż kod, bo jest źle ;)

0

Bo streamem nie wyświetlisz tak:

char c = 'C';
cout << &c;

Trzeba tak:

char c = 'C';
cout << (void*)&c;
0

Oto kod do wyświetlania adresów zmiennych lokalnych:

#include<iostream>
using namespace std;

int main(){
    char c='C';
    int i=2;
    long l=2;

//wyświetlanie adresy zmiennych:
               cout<<(void*)&c<<" "<<(void*)&i<<" "<<(void*)&l<<'\n'; 
    return 0;
};

Teraz dla zmiennych wyświetliło mi takie adresy: 0x22ff77 0x22ff70 0x22ff6c

1 użytkowników online, w tym zalogowanych: 0, gości: 1