Inicializace ukazatele v jazyce C ++

hlasů
9

Lze přiřadit ukazatel na hodnotu o prohlášení? Něco takového:

    int * p = &(1000)
Položena 22/05/2009 v 23:28
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
22

Ano, můžete inicializovat ukazatele na hodnotu v prohlášení, ale můžete to udělat:

int *p = &(1000);

A je adresa provozovatele a nelze uplatnit, že na konstantní (i když, pokud jste mohl, že by bylo zajímavé). Zkuste použít jinou proměnnou:

int foo = 1000;
int *p = &foo;

nebo typ lití:

int *p = (int *)(1000); // or reinterpret_cast<>/static_cast<>/etc
Odpovězeno 22/05/2009 v 23:33
zdroj uživatelem

hlasů
7

Existují dvě věci není otázka pro mě jasná. Chcete nastavit ukazatel na určitou hodnotu (tj adresa), nebo chcete, aby ukazatel přejděte na nějaké konkrétní proměnné?

V druhém případě stačí použít adresa-provozovatele. Hodnota tohoto ukazatele je pak nastaven na adresu části some_int_variable.

int *p = &some_int_variable;
*p = 10; // same as some_int_variable = 10;

Poznámka : To, co následuje, je zlý změna hodnoty ukazatel ručně. Pokud si nevíte, zda chcete dělat, že nechcete, aby to.

V prvním případě (tedy nastavení na nějaké konkrétní, danou adresu), nemůžete prostě

int *p = 1000;

Vzhledem k tomu, kompilátor nebude mít int a interpretovat jako adresu. Budete muset říci kompilátoru je třeba udělat, aby explicitně:

int *p = reinterpret_cast<int*>(1000);

Nyní, ukazatel bude odkazovat na nějaké číslo (snad) na adrese 1000. Všimněte si, že výsledek je implementace definovány. Ale přesto, že jsou sémantika, a to je způsob, jak říci kompilátoru, o tom.

Aktualizace : Výbor stanovil podivné chování reinterpret_cast<T*>(0), které bylo navrženo poznámku a pro které jsem poskytl řešení dříve. Viz zde .

Odpovězeno 22/05/2009 v 23:52
zdroj uživatelem

hlasů
4

Co takhle:

// Creates a pointer p to an integer initialized with value 1000.
int * p = new int(1000); 

Testován a funguje. ;-)

Odpovězeno 22/05/2009 v 23:40
zdroj uživatelem

hlasů
2

Um. Nemyslím si, že můžeš non-const adresu konstantní takhle.

ale to funguje:

int x = 3;
int *px = &x;
cout << *px; // prints 3

nebo toto:

const int x = 3;
const int *px = &x;
const int *pfoo = reinterpret_cast<const int*>(47);
Odpovězeno 22/05/2009 v 23:35
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more