PDA

Tam Sürümünü Görmek İçin : Erişebilirlik


quasimodo
23/10/2006, 21:12
#include <iostream>
using namespace std;
int a;
int main()
{
int a; /*buradaki*/
{
int a;
/*Acaba buradan "buradaki" yazan a değişkenine nasıl ulaşabilirim?*/
}
return 0;
}


acehreli
24/10/2006, 02:15
"a" diyerek en icerdekini, "::a" diyerek de global ad alanindakini belirtiriz. Ikisinin arasindaki a'yi belirtemeyiz.

Her ne kadar normalde karsilasilan bir durum olmasa da bir kac cozum dusunebiliriz:

1) Degiskenlerden birisinin adini degistirmek

2) Icerideki a'yi bildirmeden once ortadaki a'yi gosteren bir gosterge tanimlamak:


int a; /* buradaki */
{
int * ortadaki = &a;
int a;
*ortadaki = 42; /* iste ulasabildik */


3) Bence en iyisi, icerideki kodu yeni bir isleve tasimaktir:


void foo(int * ortadaki)
{
int a;
*ortadaki = 42;
}

/* main icinde: */

int a; /* buradaki */
foo(&a);


Ali

quasimodo
25/10/2006, 22:30
2) Icerideki a'yi bildirmeden once ortadaki a'yi gosteren bir gosterge tanimlamak:


int a; /* buradaki */
{
int * ortadaki = &a;
int a;
*ortadaki = 42; /* iste ulasabildik */


Ali
3. gayet iyi bir çözüm ama burada
int * ortadaki = &a; olan kısmı
int a; olan kısımdan sonra tanımlarsak bi hata verirmi?

quasimodo
25/10/2006, 23:53
son sorduğum soruda saçmalamışım özürdilerim...

acehreli
26/10/2006, 00:03
Ben de 3. cozumde son iki satiri ters yazmisim :) foo(&a)'yi once cagirmam gerek, yoksa yine icerideki a'dan bahsetmis oluruz:


/* main icinde: */

foo(&a); / * ortadaki */
int a; /* buradaki */


Ali