SORU
9 Temmuz 2009, PERŞEMBE


C geçen referans olarak bir dizi?

Nasıl C referans tarafından yapılar bir dizi geçebilir miyim?

Örnek olarak:

struct Coordinate {
   int X;
   int Y;
};
SomeMethod(Coordinate *Coordinates[]){
   //Do Something with the array
}
int main(){ 
   Coordinate Coordinates[10];
   SomeMethod(&Coordinates);
}

CEVAP
9 Temmuz 2009, PERŞEMBE


C dizilerin ilk elemanı gösteren bir işaretçi olarak geçirilir. Gerçekten değeri (işaretçi değer geçirilir, ama dizi kopyalanmıyor) tarafından kabul olmayan tek unsurdur. Arayan işlevi değiştirmenize izin verir.

void reset( int *array, int size) {
   memset(array,0,size * sizeof(*array));
}
int main()
{
   int array[10];
   reset( array, 10 ); // sets all elements to 0
}

Eğer istediğin dizinin kendisi değişiyor artık, (elementlerin... sayı) olamaz yığın dinamik olarak ayrılan bellek ile yığın veya genel dizilerle, sadece yap. Eğer işaretçiyi değiştirmek istiyorsanız, bu durumda, bunun için bir işaretçi geçirmek gerekir:

void resize( int **p, int size ) {
   free( *p );
   *p = (int*) malloc( size * sizeof(int) );
}
int main() {
   int *p = (int*) malloc( 10 * sizeof(int) );
   resize( &p, 20 );
}

Soru düzenleme özellikle yapılar dizisi geçen hakkında sormak. İki çözüm var: bir typedef bildirmek, ya da bir yapı geçirmeden açık olun:

struct Coordinate {
   int x;
   int y;
};
void f( struct Coordinate coordinates[], int size );
typedef struct Coordinate Coordinate;  // generate a type alias 'Coordinate' that is equivalent to struct Coordinate
void g( Coordinate coordinates[], int size ); // uses typedef'ed Coordinate

Bildirdiğiniz gibi bu tip (ve C ortak bir dil) typedef:

typedef struct Coordinate {
   int x;
   int y;
} Coordinate;

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CrazyMan

    CrazyMan

    14 Mayıs 2008
  • ShoSho

    ShoSho

    20 Ocak 2010
  • Tire Rack

    Tire Rack

    31 Mayıs 2007