C言語で配列を参照渡しする?
2023-12-09 18:53:57
質問
C言語で構造体の配列を参照渡しする方法を教えてください。
例として
struct Coordinate {
int X;
int Y;
};
SomeMethod(Coordinate *Coordinates[]){
//Do Something with the array
}
int main(){
Coordinate Coordinates[10];
SomeMethod(&Coordinates);
}
どのように解決するのですか?
C言語では、配列は最初の要素へのポインタとして渡されます。それらは実際に値によって渡されない唯一の要素です (ポインタは値によって渡されますが、配列はコピーされません)。そのため、呼び出された関数が内容を変更することができます。
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
}
さて、配列そのものを変更したい場合(要素数...)、スタックやグローバル配列ではできず、ヒープに動的に割り当てられたメモリでのみ可能です。この場合、ポインタを変更したい場合は、ポインタを渡す必要があります。
void resize( int **p, int size ) {
free( *p );
*p = malloc( size * sizeof(int) );
}
int main() {
int *p = malloc( 10 * sizeof(int) );
resize( &p, 20 );
}
質問の編集で、構造体の配列を渡すことについて具体的に尋ねています。typedefを宣言するか、構造体を渡していることを明示するかです。
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
宣言したとおりにtypedefすることができます(C言語ではよくあるイディオムです)。
typedef struct Coordinate {
int x;
int y;
} Coordinate;
関連
-
Cエラー [エラー] 代入_Ashesの左オペランドにlvalueが必要です-プログラマーズ・シークレット
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] 配列の最初の要素を取得する
-
[解決済み] C 言語の配列へのポインタ/ポインタの配列の曖昧さ解消
-
[解決済み】JavaScriptで配列の要素を削除する - delete vs splice
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
解決済み] g++ コンパイルエラー: ')'トークンの前に一次式があることが予想される
-
構造体の配列--[エラー] '['トークンの前に一次式があることが予想される
-
libc++abi.dylib: NSException タイプの捕捉されない例外で終了するエラー
-
赤線の位置は必ずしも間違っていない:式は変更可能なlvalueでなければならないエラーは、この文とは別の場所に存在する可能性があります。
-
ポインタ定数および定数ポインタ
-
[解決済み] 初期化でポインタ対象の型から修飾語を捨てる
-
[解決済み] C言語で%sを正しく使う - 超基本レベル
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] Cコードの単体テスト【終了しました
-
[解決済み] mallocとcallocの違い?