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

  • ExcelIsFun

    ExcelIsFun

    16 ŞUBAT 2008
  • Jonathan Flavell

    Jonathan Fla

    1 HAZİRAN 2006
  • Leigh Momii

    Leigh Momii

    10 Mayıs 2006