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

  • FattySpins's channel

    FattySpins's

    17 Mayıs 2009
  • My name is Festis and I'm free

    My name is F

    2 EKİM 2011
  • HSmasteryoda .

    HSmasteryoda

    22 Ocak 2010