C言語 配列を渡す方法 文字列を渡す方法

このページは、ポインタと配列の関係 の記事を読んでおくと
理解しやすくなります。


int型配列を渡す

C言語では、配列のデータをそのまま関数に値渡しで渡す事はできません。

通常は、配列の先頭アドレスと要素数を渡して処理させます。

#include <stdio.h>

void show(int* ip, int len);

void main(void) {
    int idata[3];

    idata[0] = 5;
    idata[1] = 15;
    idata[2] = 25;

    show(idata, 3); // show(&idata[0], 3); とも書ける。

}

void show(int* ip, int len) {
    int ans = 0;

    for (int i = 0; i < len; i++) {
        ans = ans + *ip;
        ip++;
    }

    printf("合計=%d\n", ans);
}
合計=555

このプログラムは、
配列idataのデータを全て足して表示するプログラムです。

関数showには、idataの先頭アドレスと要素数を渡しています。

ポインタだと多少分かりずらいので、
引数を配列形式で記述する事も可能です。

#include <stdio.h>

void show(int ip[], int len);

void main(void) {
    int idata[3];

    idata[0] = 5;
    idata[1] = 50;
    idata[2] = 500;

    show(idata, 3); // show(&idata[0], 3); とも書ける。

}

void show(int ip[], int len) {
    int ans = 0;

    for (int i = 0; i < len; i++) {
        ans = ans + ip[i];
    }

    printf("合計=%d\n", ans);
}
合計=555

配列形式で記述していますが、処理自体は同じです。

文字列を渡す

今度は、文字列も渡してみましょう。
文字列の場合は、終端文字が設定されているので、
関数に要素数を知らせる必要はありません。

#include <stdio.h>

void show(char* cp);

void main(void) {
      char cdata[5];

      cdata[0] = 's';
      cdata[1] = 't';
      cdata[2] = 'a';
      cdata[3] = 'r';
      cdata[4] = '\0';

      show(cdata);      // show(&cdata[0]); とも書ける。

}

void show(char* cp) {
      printf("文字列=%s\n", cp);
}
文字列=star

文字列を渡す場合も先頭アドレスを渡してやればOKです。

文字列の終わりは、NULL(\0)が目印なので、問題ありません。

そのままprintf関数で表示する事ができます。

より正確に言うと、文字列を渡すと言う表現よりは、
文字列が格納されているアドレス値を渡す。と言う表現が正しいです。