有大神帮忙注解下面这段C语言代码吗?感谢!!

staticu16*get_one_mp3_file(file_list_t*p_list,u16*file_name){u32loopi=0;for(loopi=0;l... static u16 *get_one_mp3_file(file_list_t *p_list, u16 *file_name)
{
u32 loopi = 0;

for (loopi = 0; loopi < p_list->file_count; loopi ++)
{
if (p_list->p_file[loopi].type == NOT_DIR_FILE
&& uni_strcmp(p_list->p_file[loopi].p_name, file_name) == 0)
{
OS_PRINTF("%s\n",p_list->p_file[loopi].p_name);
return p_list->p_file[loopi].name;
}
}
return NULL;
}
展开
 我来答
cdyzxy
2016-06-07 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3783万
展开全部
static u16 *get_one_mp3_file(file_list_t *p_list, u16 *file_name) //得到1个MP3文件
{ //返回值是文件名
u32 loopi = 0; //循环变量

for (loopi = 0; loopi < p_list->file_count; loopi ++) //从第1个参数中取得文件数,进行循环
{
if (p_list->p_file[loopi].type == NOT_DIR_FILE //条件:当前列表的第loopi个文件不是目录
&& uni_strcmp(p_list->p_file[loopi].p_name, file_name) == 0) //与给定文件名一致
{
OS_PRINTF("%s\n",p_list->p_file[loopi].p_name); //显示文件名
return p_list->p_file[loopi].name; //返回文件名字符串起始地址
}
}
return NULL; //上边没有找到,则返回空表示没找到
}
追问
  1. 这里的*是获取文件的意思?static u16 *get_one_mp3_file(file_list_t *p_list, u16 *file_name),不知道为什么这么写

  2. loopi < p_list->file_count,这里的->啥意思?

  3. p_list->p_file[loopi]也是看不懂

  4. return p_list->p_file[loopi].name; 取地址不是用&这个吗?

追答
这里的返回值是:u16 *,是指向u16数据的指针,也可以理解成,文件名每个字符是u16型数据,指向文件名第1个字符的地址就是u16 *
plist是个指向某个结构的指针,访问它指向的结构中的某个成员变量就用plist->再写结构中的变量名即可,p_list->file_count是取p_list指向结果中变量file_count的值
p_list->p_file[loopi].name说明p_list指向的结构中包含另一个结构数组,每个元素是一个文件信息,当前元素就是p_file[loopi],元素结构中的变量name是一个字符串数组(u16 *型的变量),这里strcmp函数要求提供两个字符串起始地址好进行比较,一个是列表中第n个文件名,一个是函数参数给定的变量名
由于name已经是字符串首地址了,可以这样直接返回,如果要用到&的话要写:
return &(p_list->p_file[loopi].name[0])
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式