わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

仮引数の配列変数がポインタになるのを検証するコード

仮引数の配列変数は,ポインタなのか配列なのか - わさっきの続きです.検証コードを書いてみました.

#include <stdio.h>

void f1(int y[]);
void f2(int y[]);

void f1(int x[3])
{
  printf("%d\n", x[0] + x[1] + x[2]);
}

void f2(int x[2])
{
  printf("%d\n", x[0] + x[1]);
}

int main(void)
{
  int x[3] = {3, 2, 1};
  void (*f_array[2])(int y[]) = {f1, f2};

  f_array[0](x);
  f_array[1](x);

  return 0;
}

上記で3箇所,「int y」というのがありますが,これを「int *」に変えても,「int y[2]」でも「int y[3]」でも,はたまた「int y[100]」にしても,コンパイル時に警告・エラーは出ません(「gcc -Wall -ansi -pedantic」でコンパイルしています).
一つは「int *」,一つは「int y[100]」,あと一つは「int x
」にしても,コンパイラはおとがめなしでしたthe compiler did not condemn the code
ところで,昨日の本文では,「関数定義」と「関数宣言」の2種類に場合分けをして,仮引数の配列変数がポインタになることを確認していきましたが,上のf_arrayのように,「関数型(を含む変数)」のことを忘れていました.しかし関数型の変数についても,成立するようです.