C言語のポインタと配列の違いを徹底解説!&演算子・sizeof・代入ルール
C言語において、ポインタと配列は多くの場面で同じように扱われます。しかし、両者にはいくつか重要な違いが存在します。本記事では、その違いを「&演算子」「sizeof演算子」「代入の可否」の観点から、サンプルコード付きでわかりやすく解説します。
&演算子の挙動の違い
&pointer:ポインタ変数自体のアドレスを返します。&array:配列の先頭要素のアドレスを返します。
sizeof演算子の挙動の違い
sizeof(array):配列の全要素が消費するメモリの合計サイズを返します。たとえばint a[10];の場合、int型が4バイトの環境では40が返されます。sizeof(pointer):ポインタ変数自体が消費するメモリサイズのみを返します(一般的な環境では4バイトまたは8バイトです)。
再代入の可否
配列変数は、宣言後に別の値を再代入することができません。一方、ポインタ変数は何度でも値(指し示すアドレス)を更新できます。これが、ポインタと配列の最も大きな実用上の違いといえます。
宣言方法
int a[]; // 配列 int *p; // ポインタ
ここで、整数型へのポインタ変数を1つ考えてみましょう。
int *i;
続いて、以下のような代入を行った場合の結果を確認してみます。
a = &i; // 不正な代入。配列変数は更新・変更できないため p = &i; // 正しい代入。ポインタ変数は自由に更新できるため
このように、配列名は定数的な性質を持つため代入文の左辺に置くことができませんが、ポインタ変数は通常の変数と同様に代入が可能です。ポインタと配列の関係を正しく理解することは、C言語におけるメモリ操作やバグの防止において非常に重要です。
-
C#の多次元配列とは?2次元配列の宣言方法と使い方を実例付きで解説
C#では、多次元配列を扱うことができます。int型の2次元配列は、次のように宣言します。int[] a;多次元配列の中で最もシンプルな形式が2次元配列です。2次元配列とは、1次元配列を要素として持つ配列、すなわち「配列の配列」のような構造をイメージすると分かりやすいでしょう。例えば、次の図は3行4列の2次元配列を表しています。多次元配列の使用例ここからは、実際にC#で多次元配列を操作するサンプルコードを見ていきましょう。以下の例では、5行2列の2次元配列を宣言・初期化し、入れ子になったforループですべての要素を出力します。using System; namespace ArrayApplic
-
Pythonで学ぶ畳み込み(Convolution)の基礎:画像から特徴を抽出する仕組みと実装
本記事では、Python 3.x(またはそれ以前のバージョン)における「畳み込み(Convolution)」について解説します。畳み込みは、ニューラルネットワークや画像の特徴抽出において中心的な役割を果たす基本的な操作です。推奨環境 − Jupyter Notebook前提条件 − NumPy および Matplotlib がインストール済みであることインストール方法必要なライブラリが未インストールの場合は、以下のコマンドで導入できます。>>> pip install numpy >>> pip install matplotlib畳み込みとは畳み込みとは、