C言語のきほん「ポインタの基本(10)配列とポインタの相違点」

スポンサーリンク
C言語

今回は、「ポインタと配列の相違点」をご紹介しよう。

int *p;
int a[5];
p = a;

このコードでは、intへのポインタpに代入されているのは、aすなわち&a[ 0 ]である。
この結果、ポインタpはa[ 0 ]を指す。

int x[5];
int a[5];
x  = a //エラー

代入x = aの右オペランドは、aであるが、左オペランドは配列xである。

この代入はエラーとなる。これは試さないでいただきたい

代入演算子の左オペランドを配列とすることはできない。

したがって、配列を全要素を別の配列にコピーする際は、次のようなプログラムになる。

なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.90.0)を使用して作成し、gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0でコンパイルしている。

配列の全要素を別の配列にコピーするプログラム

//配列の全要素を別の配列にコピーするプログラム

#include <stdio.h>

int main(void)
{
    int a[5];
    int b[5];

    for (int i = 0; i < 5; i++)
    {
        printf("a[%d]:",i); //要素に値を読み込む
        scanf("%d",&a[i]);
    }

    for (int i = 0; i < 5; i++)
        b[i] = a[i];
    
    puts("  a   b");
    puts("-----------");
    for (int i = 0; i < 5; i++)
        printf("%4d%4d\n",a[i],b[i]);
    
    return 0;    
    
}

実行結果

a[0]:16
a[1]:43
a[2]:67
a[3]:78
a[4]:86
  a   b
-----------
  16  16
  43  43
  67  67
  78  78
  86  86

代入演算子によって、配列を代入することはできない。

すなわち、代入演算子によって、配列の先頭要素へのポインタを変更することはできない

したがって、コピーは、繰り返し文などを用いた全要素の逐一代入によって行う。

参考) 新・明解C言語 入門編 第2版 柴田 望洋 (著)SBクリエイティブ

コメント

タイトルとURLをコピーしました