関数がアドレスを要求しているのにポインタを実引数として与えたら実行されるのはなぜか?

実現したいこと

配列aとbに共通して含まれる文字列をすべて表示するプログラムを作成しています.

発生している問題・エラーメッセージ

プログラムはうまく作動するのですが、関数はアドレスを要求しているのにポインタ渡しても動くんですか?

該当のソースコード

C

#include <stdio.h>#define NUMBER_A 3#define NUMBER_B 4 int compare(char p[], char q[]){while (*p != '\0' || *q != '\0'){ if (*p++ != *q++) return 0; } return 1;} int main(void){ char a[NUMBER_A][8] = {"red", "green", "blue"}; char b[NUMBER_B][8] = {"green", "yellow", "red", "purple"}; for (int i = 0; i < NUMBER_A; i++){ for (int j = 0; j < NUMBER_B; j++){ if (compare(*(a + i),*(b + j)) == 1) printf("%s\n",*(a + i)); } } return 0;}

試したこと

ある学校の問題でif (compare(①,②) == ③),printf("%s\n",①);と空白を埋める問題でもともとアドレスを要求しているしていると思って(a + i)と(b + j)と空白を埋めて実行したのですがエラーが出てしまって動かなくてもしかしたら二次元配列だから型がちがうのかなーと思って質問しています.

補足情報(FW/ツールのバージョンなど)

gdbオンラインで実行しています.

コメントを投稿

0 コメント