実現したいこと
配列aとbに共通して含まれる文字列をすべて表示するプログラムを作成しています.
発生している問題・エラーメッセージ
プログラムはうまく作動するのですが、関数はアドレスを要求しているのにポインタ渡しても動くんですか?
int compare(char p[], char q[]){→暗黙の型変換によりint compare(char *p, char *q){となり宣言時にはアドレスとなっているので関数の仮引数はアドレスを要求しており、char a[NUMBER_A][8] = {"red", "green", "blue"}; char b[NUMBER_B][8] = {"green", "yellow", "red", "purple"};と配列で宣言しているのでこの宣言以外では配列名を使うとそれはアドレスを示していてつまり配列名を実引数とすればいいのでは?と今頭の中で解釈しているんですが、それは違うんですか?
該当のソースコード
C
1#include <stdio.h> 2#define NUMBER_A 3 3#define NUMBER_B 4 4 5int compare(char p[], char q[]){ 6while (*p != '\0' || *q != '\0'){ 7 if (*p++ != *q++) 8 return 0; 9 } 10 return 1; 11} 12 13int main(void) 14{ 15 char a[NUMBER_A][8] = {"red", "green", "blue"}; 16 char b[NUMBER_B][8] = {"green", "yellow", "red", "purple"}; 17 for (int i = 0; i < NUMBER_A; i++){ 18 for (int j = 0; j < NUMBER_B; j++){ 19 if (compare(*(a + i),*(b + j)) == 1) 20 printf("%s\n",*(a + i)); 21 } 22 } 23 24 25 26 return 0; 27}
試したこと
ある学校の問題でif (compare(①,②) == ③),printf("%s\n",①);と空白を埋める問題でもともとアドレスを要求しているしていると思って(a + i)と(b + j)と空白を埋めて実行したのですがエラーが出てしまってもしかしたら二次元配列だから型がちがうのかなーと思って質問しています.
補足情報(FW/ツールのバージョンなど)
gdbオンラインで実行しています.
