一个函数只能返回一个值?笑话

函数的define:
若有两个变量x和y,对于x的每一个值,y都有唯一确定的值与它对应,则y与x有函数关系。一般用表示。其中x叫做自变量,y叫做因变量。

唯一的值?对啊,C语言函数中也是只能return 一个的而已,虽然你能写多个return 到C语言的函数中,可是见到第一个return 后,后面的操作都是不执行的。读者可以试试!!
那么,我们怎样从一个C语言函数中得到多个值呢?我们可以用些技术吧???
对的,真的可以!!!
①可以利用指针,指针里放着变量的地址,如果我们改变它的指向,不就可以改变它的值吗?就相当于【我搬家了,地址改变了】,就可以改变我的值啦!!
所以函数中我们可以传入多个指针来实现!!!
#include<stdio.h>
int i=6;
int main()
{
 void fun(int **f3,int **f4);
 int f1=7,f2=2;
 int **f5,**f6;
 
 f5=&f1;
 f6=&f2;
 printf("%d  %d\n\n",*f5,*f6);
 fun(&f5,&f6);
 printf("%d  %d",*f5,*f6);//改变后
 system("pause");
 
}

void fun(int **f3,int **f4)
{
    *f3=&i;
     *f4=&i;
}

这样就可以改变了!!模拟实现了返回两个值

②、和①类似。只是这里是字符串指针,这里不多说了

③、大哥出来了。。这是最有用的方法。。。记得我们C语言的结构体不?它可以有更强大的功能!!!!

我们用的strut MyStruct定义一个结构体后,这里的struct MyStruct就是一个类型。。相当于int double float那些。。所以,,我们大胆用,,定义【结构体函数】

#include<stdio.h>
struct MyStruct
{
char name[20];
int number;
};
int main()
{
struct MyStruct fun();
struct MyStruct cp=fun();

printf("%s %d",cp.name,cp.number);
  system("pause");
  }
 
 
   struct MyStruct fun()
   {
   struct MyStruct c;
   strcpy(c.name,"name");
   c.number=1564;
   return (c);
  
  }

这样就可以了!!

也可以指针思想!!传入结构体指针

#include<stdio.h>
  struct MyStruct
  {
  char name[20];
  int number;
  };
  int main()
  {
  struct MyStruct Liu;
  void  fun(struct MyStruct * cp);
  fun(&Liu);
  printf("%s %d",Liu.name,Liu.number);
  system("pause");
  }
  void  fun(struct MyStruct * cp)
  {
  strcpy(cp->name,"name");
  cp->number=123456;
 
}

④、用全局变量,,(不推荐),但是有时候很好用的奥!!特别是记录函数调用了多少次!!Remember!!!

⑤、能粉楼主一个么??

一个函数只能返回一个值?笑话,布布扣,bubuko.com

时间: 2024-11-06 15:25:16

一个函数只能返回一个值?笑话的相关文章

面试题--&gt;写一个函数,返回一个数组中所有元素被第一个元素除的结果

1 package com.rui.test; 2 3 import java.util.Random; 4 5 /** 6 * @author poseidon 7 * @version 1.0 8 * @date:2015年10月25日 上午11:12:24 9 * @description: 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果 10 * 陷阱: 11 * 1.循环需要倒着写,为什么? 12 * 想想顺着写循环的结果,第一个元素的值会发生变化门后面再除就会有问

[编程之美]写一个函数,返回一个数组中所有元素被第一个元素除的结果

题目: 写一个函数,返回一个数组中所有元素被第一个元素除的结果: 错误的版本: void DivArray(int *array, int n) { for (int i = 0; i < n; ++i) { array[i] /= array[0]; } } 错误原因:在循环的第一步,第一个元素就变成了1,然后再用它去除以其他元素,就不符合题目要求了 改进: 1:使用其他变量保存第一个元素: void DivArray3(int *array, int n) { assert(array !=

java 一个函数EnumMap返回多个值

java 一个函数如何返回多个值 在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值的key是什么,只能通过doc或者通过源代码来查看. 2.传入一个引用进去,修改引用的属性值.问题:不实用. 3.通过泛型构造一个类似python的tuple类,或者构造一个JavaBean,其问题都是“一次性”,觉的不优雅. 个人解决方案: 使用EnumMap作为返回值类型,自己定义一个enum,将可

java 一个函数如何返回多个值

在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值的key是什么,只能通过doc或者通过源代码来查看. 2.传入一个引用进去,修改引用的属性值.问题:不实用. 3.通过泛型构造一个类似python的tuple类,或者构造一个JavaBean,其问题都是"一次性",觉的不优雅. 个人解决方案: 使用EnumMap作为返回值类型,自己定义一个enum,将可能返回的属性名定义为en

java ----一个函数传回多个值的总结

java 一个函数如何返回多个值 参考方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值的key是什么,只能通过doc或者通过源代码来查看. 2.传入一个引用进去,修改引用的属性值.问题:不实用. 3.通过泛型构造一个类似python的tuple类,或者构造一个JavaBean,其问题都是"一次性". 比较好的方法: 接口: package com.etc.utils; import java.util.EnumMap; public interface TestSer

【前端小小白的学习之路】----&gt;用JS编写一个函数,返回数组中重复出现过的元素

用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: var arr = [1, 2, 3, 1, 2, 3, 4, 5]; var getRepeat = function (arr) { var obj = {}; for (var i = 0, len = arr.length; i < len; i++) { if (obj[arr[i]] == undefined) { obj[arr[i]] = 1; } else { obj[arr[i]]++; } } for (var

函数可以返回一个局部对象,而不能返回一个局部对象的引用(指针):

函数可以返回一个局部对象,而不能返回一个局部对象的引用(指针):当函数返回一个局部对象时,虽然这个对象已经释放,但是返回时会产生一个临时的对象.而当返回一个局部对象的引用时,这个对象已经不存在了.这就要求在函数参数中,包含一个引用或指针.int &func(int a,int b,int &retsult){ retsult = a + b; return &retsult}但是如下代码是错误的(返回局部对象的引用)int &func(int a,int b){ int &

编程之美 - 写一个函数,返回数组中所有元素被第一个元素除的结果

问题: 写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己 分析: 主要注意两点:1,判断输入是否合法:2,判断除数是否为0:3,从后往前除(真猥琐) 代码实现: 1 /* div_array.cc 2 * 2014/09/03 create 3 * 写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己 4 */ 5 #include <iostream> 6 using namespace std; 7 8 void div_ar

写一个函数,对于一个给定的整数,如果它的二进制模式从正向看和反向看是一样的,那么返回true;

写一个函数,对于一个给定的整数,如果它的二进制模式从正向看和反向看是一样的,那么返回true:也就是实现这样一个函数boolean isPalindrome(int x); 分析一下,该题目主要是通过移位来实现,二进制模式从正向看和反向看是一样的,说明这个二进制数两边是对称的, 画个图看看: 代码如下: boolean isPalindrome(int x){ int flag = 1,i,j,temp;    while(1){        if(num&(0x1<<flag)){