函数返回多个值而不使用指针

时间:2010-08-28 07:16:41

标签: c

如果我创建一个函数,将多于1个值返回给同一个变量,如示例所示:

char *strstr(char *s1,char *s2)
{
 int flag=1;
 char i,j;
 for(i=0;*s1;i++)
 {
  if(s1[i]==s2[0])
  for(j=i;*s2;j++)
  {
   if(s1[j]!=s2[j])
   flag=0;
  }

 }
 return i;
 return 0;
}

函数返回的实际值是什么?最后返回的值是否与第一个返回值重叠?

2 个答案:

答案 0 :(得分:4)

第一次返回命中(return i;此处)将是实际返回的内容。一个好的编译器会告诉你return 0;是死代码,因为它是无法访问的(即控制流无法到达该语句)。

除非你创建自己的元组或对结构(或其他一些更多的语义结构),否则在C中返回多个值(不使用全局或其他不可维护的)的唯一合理方法是使用指针作为out参数,虽然你说你不想这样做。

答案 1 :(得分:1)

程序通常倾向于有多个return语句,但这并不意味着第一次返回的代码不会被执行。这通常是一个函数如何设计为返回错误代码(如果有)。小例子如下:

char * foo() 
{
char *ptr;
ptr=malloc(256);
if(ptr==NULL)
return NULL;   /// First return statement is here 
strcpy(ptr,"Stackoverflow");
return ptr; // This is second return statement.
}

这也不意味着在一次通话中执行。只执行一次返回。函数返回到调用点。