明後日テストがあるんです。
大体範囲の勉強は終わったんですが、ハッシュってのが良くわかりません。
サンプルプログラムはもらったんですが、ネットで検索して勉強してもよくわかりません。
誰か教えてください。できないと単位落としてしまいます。死んでしまいます。
サンプルを書いておきます。
わからないのは、m[DATA_NUM][JAP_LEN]あたりからです。
これって2次元配列なんでしょうか?

#include <stdio.h>
#include <string.h>
#define DATA_NUM 5
#define ENG_LEN 10
#define JAP_LEN 30

int hash(char *s){
int i=0;
int h=0;
while(s[i] != '\0'){
h=(h*256+s[i])%DATA_NUM;
i++;
}

return h;
}

int main(void){
int i;
char s[ENG_LEN];
char m[DATA_NUM][JAP_LEN];

for(i=0;i<DATA_NUM;i++)
strcpy(m[i],"nodata");

printf("string ->");
scanf("%s",s);
while(strcmp(s,"end") != 0){
printf("Japanese ->");
scanf("%s",m[hash(s)]);
printf("string ->");
scanf("%s",s);
}

printf("string ->");
scanf("%s",s);
while(strcmp(s,"end") != 0){
printf("%s\n",m[hash(s)]);
printf("string ->");
scanf("%s",s);
}
return 0;
}