数组指针的问题

#include "iostream"
#include "string.h"
using namespace std;

char *fun(char (*a)[10], int num)
{

char *p=a[0];int i; //这里看不懂
for(i=1;i<num;i++)
if(strlen(a[i])>strlen(p))
p=a[i];
return p;
}

main()
{
char s[5][10],*ps;
int i=0;
cout<<"请输入字符串"<<endl;
cin>>s[i];
while(!strcmp(s[i],"**")==0)
{
i++;
cin>>s[i];
}
ps=fun(s,i);
cout<<"最长的字符串是"<<ps<<endl;
return 0;
}
主要 是 定义函数的部分
char *p=a[0] 这里最迷糊 指针p 到底是指向的 哪个 a[0] 是数组么
char (*a)[10] 应该是定义了一个 数组指针吧
那 a[0] 是在哪里 定义的?

一楼和三楼的答案都是错的。二楼正解。
char (*a)[10]定义了一个数组指针,不是指针数组。首先 a 是一个指针,它只能指向长度为10的字符数组,不能指向长度为 9 的字符数组,不信楼主将主函数中的 char s[5][10] 改为 char s[5][9]就知道了,会出现编译错误。
char s[5][10] 是一个二维数组,是数组的数组,可以理解为 5 个长度为 10的字符数组,而
char *p=a[0] ,就是把第 1 个长度为 10 的字符数组的地址赋给 p。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-16
char *fun(char (*a)[10], int num)
传进去的参数char (*a)[10],是一个指针数组,每一个值都是一个指向char类型的指针。。

char *p=a[0]是把这个指针数组的第一个指针赋值给p,也就是说p和指针a[0]指向的是同一个char

比如说char (*a)[10]这十个指针分别指向的十个char类型数据分别是:a b c d e f g h i g
那么char *p=a[0]之后,p这个指针也指向a了。。。*p的值就是a

希望对你有帮助。。。仍有问题可以HI 我。。。
第2个回答  2011-02-16
函数里面的参数char (*a)[10]是一个指针数组,即每一个元素就是一个指针。
char *p=a[0] 就是将p赋值为数组a的第一个元素。
其实p和a[i]都是字符型指针,所以函数体后面的语句就很简单了。
如果还有什么问题再交流。
第3个回答  2011-02-16
char (*a)[10]定义了一个数组指针,a是一个指针,它将指向一个char[10]的数组。
可以想象char [10]是一个结构体array_t,那么a的定义就是array_t * a;那么a[0]自然是指第一个array_t结构了,即第一个char[10],在你的例子中将是s[0]。