Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C/C++における配列の関数への渡し方を解説

このチュートリアルでは、配列が関数へどのように渡されるのかについて詳しく解説します。

C/C++において、配列を関数に渡す際には、配列そのものがコピーされるのではなく、ポインタとして渡されます。つまり、配列の先頭要素のアドレスが関数に引き渡されることになります。そのため、関数の内部で sizeof 演算子を使って配列のサイズを求めると、元の配列全体のサイズではなく、ポインタ自体のサイズが返される点に注意が必要です。

サンプルコード

#include <stdio.h>
// 配列をポインタとして渡す
void fun(int arr[]){
   unsigned int n = sizeof(arr)/sizeof(arr[0]);
   printf("\nArray size inside fun() is %d", n);
}
int main(){
   int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
   unsigned int n = sizeof(arr)/sizeof(arr[0]);
   printf("Array size inside main() is %d", n);
   fun(arr);
   return 0;
}

実行結果

Array size inside main() is 8
Array size inside fun() is 2

実行結果を見ると、main() 内では配列の要素数である 8 が表示される一方、fun() 内では 2 が表示されています。これは、fun() 内では arr がポインタとして扱われているためです。64ビット環境ではポインタのサイズは 8 バイト、int 型は 4 バイトであるため、8 ÷ 4 = 2 という結果になります。

この挙動を避けたい場合は、配列の要素数を別途引数として関数に渡すのが一般的な手法です。また、C++では std::arraystd::vector などのコンテナを利用することで、サイズ情報を保持したまま安全にデータを渡すこともできます。

  1. C/C++の多次元配列とは?基本概念から動的メモリ確保まで徹底解説

    C/C++における多次元配列とは、簡単に言えば「配列の配列」として定義されるデータ構造です。多次元配列では、データが表形式(行優先順/row-major order)でメモリ上に格納されます。 以下の図は、3×3×3の次元を持つ多次元配列のメモリ割り当て戦略を示したものです。 アルゴリズム 2次元配列を動的に確保し、操作するための基本的な手順は以下の通りです。 Begin 配列の次元を宣言する new演算子を使用して2次元配列 a[][] を動的に確保する 配列に要素を格納する 配列の内容を出力する deleteによってメモリを解放する End サン

  2. 【初心者向け】C/C++における多次元配列の初期化方法をわかりやすく解説

    多次元配列とは、次元数が2以上ある配列のことです。本記事では、3×3×3の多次元配列におけるメモリ割り当ての仕組みと、実際に配列を初期化して内容を表示するC++プログラムを紹介します。下図は、次元が3×3×3の多次元配列に対するメモリ割り当ての戦略を示したものです。アルゴリズム多次元配列を初期化するプログラムは、以下の手順で構成されます。Begin 多次元配列の要素を初期化する 配列のサイズを出力する 配列の内容を表示する Endサンプルコード以下は、2行2列の二次元配列を初期化し、そのサイズと内容を出力するC++プログラムです。#include<iostream