关于二维数组的程序 对与组二维字符数组中相同字符的输出解决方案

关于二维数组的程序 对与组二维字符数组中相同字符的输出
#include   <stdio.h>  

int   main()  
{  
char   a[]={ 'a ', 'b ', 'c ', 'd ', 'e '};  
char   b[]={ 'i ', 'o ', 'p ', 'd ', 'e ', 'a '};  
char   *pa,*pb;  
int   s=0;
pa=a;  
while   (*pa!= 'e ')  

{
*pa++;  
pb=b;  
while   (*pb!= 'a ')
{
{

*pb++;
}

if   (*pa==*pb)
{  
s++;  
printf( "%c\n ",*pb);
  }
}
}  
printf( "%d\n ",s-1);  
        return   0;
}
这个是一维的
但是将a[]改为a[2][5]={ 'a ', 'b ', 'c ', 'd ', 'e ' 'f ', 'f ', 'g ', 'g '};
b[]改成b[2][8]={ 'i ', 'o ', 'p ', 'd ', 'e ', 'a ', 'f ', 'f ', 'g ', 'k '};
现在应该个怎么改


------解决方案--------------------
a[2][5]={{ 'a ', 'b ', 'c ', 'd ', 'e '}, { 'f ', 'f ', 'g ', 'g '} };
b[2][8]={{ 'i ', 'o ', 'p ', 'd ', 'e ', 'a ', 'f ', 'f '},{ 'g ', 'k '} };

------解决方案--------------------
说说你程序要完成什么功能吧,你那个程序printf( "%d\n ",s-1);为什么s要减一。
------解决方案--------------------
#include <stdio.h>

二维数组在内存中也是顺序存放的,这里可以简单的转换为char指针顺序访问就行了
int main()
{
char a[2][5]={ 'a ', 'b ', 'c ', 'd ', 'e ', 'f ', 'f ', 'g ', 'g '};
char b[2][8]={ 'i ', 'o ', 'p ', 'd ', 'e ', 'a ', 'f ', 'f ', 'g ', 'k '};
char *pa,*pb;
int s=0;
pa=(char*)a; //转换char*
while (*pa!= 'e ')

{
*pa++;
pb=(char*)b; //转换char*
while (*pb!= 'a ')
{
{

*pb++;
}

if (*pa==*pb)
{
s++;
printf( "%c\n ",*pb);
}
}
}
printf( "%d\n ",s-1);
return 0;
}