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ş:
C geçen referans olarak bir dizi?...
Geçen JavaScript fonksiyonu parametre ...
İnş std geçen gün::parametre olarak st...
Paralel olarak birden çok AJAX istekle...
Çapraz referans (adlandırılmış çapa) f...