在一个程序中,允许使用任意数量的#include的用法命

c语言如何定义一个函数可以返回多个值回去给主函数呀。_百度知道
c语言如何定义一个函数可以返回多个值回去给主函数呀。
hiphotos./zhidao/wh%3D600%2C800/sign=bd4a1ae318d8bc3ec65d0eccb2bb8a26/0dd7912397dda1447cffc36bb3b7d0a20df48671://b://b.baidu.baidu.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http://b.com/zhidao/pic//zhidao/wh%3D450%2C600/sign=eea8d38a777c00a23a1c78/0dd7912397dda1447cffc36bb3b7d0a20df48671.hiphotos.jpg" esrc="http<a href="http
我有更好的答案
& n*=10,wa.;p=malloc(sizeof(int)*6),wa:void display(int*qiao,} //用p[0]~p[5]计算各位void main() {& ;shi,&amp,& display(&amp:返回指针,int*shiwa..;ge)& p=display(); n+=wa. n= n+= n+=}使用全局变量;display() {& n*=10函数的返回值顶多是一个数;&nbsp。可以考虑以下几个方法;void main() {&nbsp,ge定义成全局变量.&nbsp,long n, wa=n/10000,int&nbsp,int* qiao,然后子程序和主程序直接用使用函数参数;*p:long display() {&nbsp,&amp,int ge)函数中用类似这样的用法计算; ;; n+= n+=ge:将&nbsp.; n=display().:(*ge)=Data%10;int *p:int*&}用一个足够长的数返回; n*=10,shi.,int* n*=10;int shiwa,&nbsp,int* n*=10; return n. free(p); wa%=10,&amp,通过函数直接返回的这个数只有在是指针时才能给出多个数据结果;}void main() {&&nbsp,&amp
你好:C不支持一个函数直接reture多个值。但是我有个建议你参考下:你把得到的Data返回,在返回的主函数里再分解处理。直接把shiwa、wa、qiao、bai、shi、ge这些变量定义为全局函数,这样在函数体里处理赋值了这些变量,在其他地方都可以使用,而不需要返回。希望我的回答能帮助到你。
c子函数返回一个数这个是规定,没有办法改变也就是return只能返回一个数值但是这个可以迂回指针或者数组。说白了就是一个指针(数组的首地址是个指针)参数用&也可全局变量也行但是原理就是子函数来改变主函数中的数据也就是在子函数生命周期到了后,变量不会跟着释放掉即可
用结构体返回会导致程序结构复杂化,并且由于结构体非指针传送的时候需要复制开销也较大定义过多全局函数会导致程序DEBUG变得异常困难最好的做法就是Pledge_Peace君的方法“这种情况下使用地址传递比较好。直接改变主函数的值。而且你这个函数写的也不需要返回值,函数前价格void 就行了。”比如:void&func(int&*a,&int&*b){&&&&*a&=&123;&&&&*b&=&321;}调用的话直接func(&ia, &ib)或者本来就是指针就直接传
uchar display(float或int *shiwa,float或int *wa,float或int *qiao....)把要返回的数据通过函数传递进来的指针返回出去(实际上是函数修改了指针指向的地址的数值,因此即使函数返回,指针指向的数据还是在的)引用的时候记得要用指针形式main(){int shiwa,wa,display(&shiwa,&wa,&qiao);}uchar display(int *shiwa,int *wa,int *qiao){shiwa=1;wa=2;qiao=3;}
这种情况下使用地址传递比较好。直接改变主函数的值。而且你这个函数写的也不需要返回值,函数前价格void 就行了。
你可以把返回值全部定义为全局变量,或者在主函数中定义一个数组,然后在这个函数中传参uchar display(int a[6] )
cdyzxy说的很详细,我在补充下就可以了: 第五条、在使用局部变量若要返回多个指针值,应使用指向指针的指针(多重指针),这就是跨函数调用内存的一些基本观念
定义一个结构体
返回结构体类型的值
struct 一个结构体传吧
具体写一下行不行呢
你想传什么?
把函数后面求的6位数字返回给主函数
#include&stdio.h&struct&myStruct{int&x;int&y;}&myStruct&test(){myStruct&str.x=100;str.y=200;return&}int&main(){myStruct&str=test();printf(&x=%d,y=%d&,str.x,str.y);return&0;}代码是外面打的,可能有错,差不多是这个意思,明白吗?
用return 可以传值会去
这个只能返回一个值
那就用全局变量做。或是传structure 写入
其他类似问题
为您推荐:
您可能关注的推广
主函数的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁第六章 程序结构_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
第六章 程序结构
上传于||暂无简介
大小:207.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢opencv中include文件夹下的文件和lib下的文件是一一对应关系吗? | Hello world!小组 | 果壳网 科技有意思
125738人加入此小组
我发现Lib文件夹下的lib文件在include文件夹下都可以找到一个近似同名的.hpp头文件,同名的.hpp文件和.lib文件是不是一一对应的呢?.hpp和.lib中的内容是什么?我自己想的是.hpp中是生命了一个类,类中包含很多成员函数,然后这些成员函数的实现(定义)在.lib文件中,是这样吗???
+ 加入我的果篮
.lib是静态链接库,不是实现。至于hpp文件的内容,你完全可以打开OpenCV里面source里面的对应文件去看代码。一般来说,OpenCV的代码是这样安排:.hpp 作为头文件,里面是类。函数,宏定义,枚举类型等的声明;至于函数和类的方法的具体实现,可以到对应module文件夹下面去找。果壳并不是问这种问题的好地方。打好C++的基础,学会google,去stackoverflow或是 opencv 的官方论坛去逛逛。
引用 的话:.lib是静态链接库,不是实现。至于hpp文件的内容,你完全可以打开OpenCV里面source里面的对应文件去看代码。一般来说,OpenCV的代码是这样安排:.hpp 作为头文件,里面是类。函数,宏...恩,多谢前辈指点
(C)2015果壳网&京ICP备号-2&京公网安备本人刚学C语言不久,用C语言在DEV(4.9.9.2)编译器上编写了一个加密程序,编译出现问题,请高手指点!_百度知道
本人刚学C语言不久,用C语言在DEV(4.9.9.2)编译器上编写了一个加密程序,编译出现问题,请高手指点!
什么问题?请高手指点,勿灌水!回答好的追加分!另外Turbo C 和 DEV C 有什么区别?
提问者采纳
1、将encode,decode函数前面的cha穿俯扁谎壮荷憋捅铂拉r改成int;可以不必预先申明。2、#include &ctype.h&,toupper()函数在里面。另外,这个函数只处理一个字符,你的意思恐怕是处理整个字符串s,应该使用循环:3、功能上没有什么大的区别。dev是免费的,开源的,执行C标准比较严。Turbo C不支持中文,DEV支持。4、经过编码的文件,不应该当做文本文件。应该看做bin二进制文件。EOF在stdio.h中定义为(-1),EOF+1==0,ch==EOF+1时执行ch--,ch就成了EOF了,放进文件,就是文件结束。正确的做法是,不用EOF,而是使用eof(FILE *f)函数,如此,担心一个字符编码后成了EOF就不必要了。注意,decode的if(ch==EOF+1)ch--,应该在解码之前执行,因为在encode里面对应的语句if (ch==EOF)ch++;是在编码之后执行的。要还原的是编码之后的字符。
再解释一下第四点(最好帮我改一下代码)
第一种办法:将所有if(ch==EOF)改成if(eof(fp1)), 删除为了纠正编码出现EOF(-1)问题的语句if(ch==EOF) ch++;及if(ch==EOF+1)ch--这个办法较好,适用于各种文件,不仅仅是txt文件。第二种办法,保留你的做法,在decode中将if(ch==EOF+1)ch--;移到ch=ch^key;的前面。这个办法,你的编码解码程序只适用于txt文件。
ch=getc(fp1);
if(eof(fp1))
putc(ch,fp2);
}while(1);
提问者评价
O(∩_∩)O谢谢
其他类似问题
为您推荐:
其他4条回答
先在main前面,声明下二个函数。二个函数返回值有问题,我看截图是char的,但是里却什么也没返回 。错误的意思,是说这二个函数跟前面的定义冲突了。我觉得就是你前面没有函数声明 。你先按上面二点改改。还有一个EOF这是文件结束符的, 穿俯扁谎壮荷憋捅铂拉用EOF+1这个东西,貌似有点问题是。 与ch比较更有问题。 判断是不是到最后,用ch!=NULL这个比较。
ch 有什么问题?(NULL改完了)
同志,编译器表示你的错误是: encode和decode这两个子函数,没有声明啊。。。。应该在使用他们之前声明一下,或者连个子函数放在main函数之前。至于turboc c和dev c 的区别,其实turboc专门是针对c的编辑器,连接器的比较入门的,就是比较麻烦的,dev c比较简单,易于观察,就是升级啦,相当于。。。。也许dev c还有反编译,这个不确定,,,我们通常用visual c++6.0
或着vs 2008
#include&&stdio.h&char&encode(char&*input,&char&*output,&char&key);&//&加上函数声明char&decode(char&*input,&char&*output,&char&key);&//&加上函数声明int&main()...
逍遥:1体=50.5血+5.1外防1定=36蓝+8.2内防1灵=7.6攻击1身法=7.5命中+4闪避+1/20会心+1/20会防峨眉:1体=50.5血+5.1外防 1定=40蓝+8.3内防1灵=7.6攻击1身法=7.5命中+2闪避+1/25会心+1/25会防武当:1体=43.8血+4.4外防1定=32蓝+7.6内防1灵=8.9攻击1身法=7命中+2.5闪避+1/20会心+1/20会防星宿:1体=52血+5外防1定=36蓝+8.9内防1灵=7.6攻击1身法=6命中+3闪避+1/18会心+1/18会防天龙:1体=58.1血+6.4外防1定=27蓝+6.3内防1灵=6.4内功攻击1力=6.4外功攻击1身法=9命中+3闪避+1/33会心+1/33会防天山:1体=55.8血+7外防1定=25蓝+4.4内防1力=7.6攻击1身法=8命中+3.3闪避+1/15会心+1/15会防少林:1体=71.5血+8.3外防1定=25蓝+5.7内防1力=7.6攻击1身法=6.5命中+2闪避+1/25会心+1/25会防明教:1体=55.2血+5.7外防1定=20蓝+4.5内防1力=8.2攻击1身法=7.5命中+3闪避+1/17会心+1/17会防丐帮:1体=60血+7.6外防1定=20蓝+5.1内防1力=7.6攻击1身法=8命中+4闪避+1/17会心+1/17会防所以1.少林 2.丐帮 3.天龙 4.天山 5.明教 6.星宿 7.峨眉 8.逍遥 9.武当
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁在任意位置获取应用程序CONTEXT
Android程序中访问资源时需要提供Context,一般来说只有在各种component中(Activity,
Provider等等)才能方便的使用api来获取Context,
而在某些工具类中要获取就很麻烦了。为此,我们可以自定义一个Application类来实现这种功能。
Java代码&&
import&android.app.A&&
public&class&MyApplication&extends&Application&{&&
&&&&private&static&MyApplication&&&
&&&&public&static&MyApplication&getInstance()&{&&
&&&&&&&&return&&&
&&&&@Override&&
&&&&public&void&onCreate()&{&&
&&&&&&&&//&TODO&Auto-generated&method&stub&&
&&&&&&&&super.onCreate();&&
&&&&&&&&instance&=&this;&&
&然后在manifest中&application&中加入name="mypackage.MyApplication"就可以在任意类中使用MyApplication.getInstance()来获取应用程序Context了。
(二)context注意事项:
在android中context可以作很多操作,但是最主要的功能是加载和访问资源。在android中有两种context,一种是
application context,一种是activity context,通常我们在各种类和方法间传递的是activity
比如一个activity的onCreate:
Java代码&&
protected&void&onCreate(Bundle&state)&{&&
&&&&&&&&super.onCreate(state);&&
&&&&&&&&TextView&label&=&new&TextView(this);&//传递context给view&control&&
&&&&&&&&label.setText("Leaks&are&bad");&&
&&&&&&&&setContentView(label);&&
&把activity
context传递给view,意味着view拥有一个指向activity的引用,进而引用activity占有的资源:view
hierachy, resource等。
这样如果context发生内存泄露的话,就会泄露很多内存。
这里泄露的意思是gc没有办法回收activity的内存。
Leaking an entire activity是很容易的一件事。
当屏幕旋转的时候,系统会销毁当前的activity,保存状态信息,再创建一个新的。
比如我们写了一个应用程序,它需要加载一个很大的图片,我们不希望每次旋转屏
幕的时候都销毁这个图片,重新加载。实现这个要求的简单想法就是定义一个静态的Drawable,这样Activity
类创建销毁它始终保存在内存中。
实现类似:
Java代码&&
public&class&myactivity&extends&Activity&{&&
&&&&&&&&private&static&Drawable&sB&&
&&&&&&&&protected&void&onCreate(Bundle&state)&{&&
&&&&&&&&&&&&&&&&super.onCreate(state);&&
&&&&&&&&&&&&&&&&TextView&label&=&new&TextView(this);&&
&&&&&&&&&&&&&&&&label.setText("Leaks&are&bad");&&
&&&&&&&&&&&&&&&&if&(sBackground&==&null)&{&&
&&&&&&&&&&&&&&&&&&&&&&&&sBackground&=&getDrawable(R.drawable.large_bitmap);&&
&&&&&&&&&&&&&&&&}&&
&&&&&&&&label.setBackgroundDrawable(sBackground);//drawable&attached&to&a&view&&
&&&&&&&&setContentView(label);&&
&&&&&&&&}&&
&这段程序看起来很简单,但是却问题很大。当屏幕旋转的时候会有leak(即gc没法销毁activity)。
们刚才说过,屏幕旋转的时候系统会销毁当前的activity。但是当drawable和view关联后,drawable保存了view的
reference,即sBackground保存了label的引用,而label保存了activity的引用。既然drawable不能销毁,它所
引用和间接引用的都不能销毁,这样系统就没有办法销毁当前的activity,于是造成了内存泄露。gc对这种类型的内存泄露是无能为力的。
避免这种内存泄露的方法是避免activity中的任何对象的 生命周期长过activity,避免由于对象对
activity的引用导致activity不能正常被销毁。我们可以使用application context。application
context伴随application的一生,与activity的生命周期无关。application
context可以通过Context.getApplicationContext或者Activity.getApplication方法获取。
避免context相关的内存泄露,记住以下几点:
1. 不要让生命周期长的对象引用activity
context,即保证引用activity的对象要与activity本身生命周期是一样的
2. 对于生命周期长的对象,可以使用application context
3. 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周期变化
(三)获取别的包的context
Android中有Context的概念,想必大家都知道。Context可以做很多事情,打开activity、发送广播、打开本包下文件夹和数据库、
获取classLoader、获取资源等等。如果我们得到了一个包的Context对象,那我们基本上可以做这个包自己能做的大部分事情。
&&&&&&&&&那我们能得到吗?很高兴的告诉你,能!
Context有个createPackageContext方法,可以创建另外一个包的上下文,这个实例不同于它本身的Context实例,但是功能是一样的。
这个方法有两个参数:
1。packageName& 包名,要得到Context的包名
标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。
CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思
是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。
下面给个小例子,执行另外一个包里面的某个类的方法。
另外一个包的包名是chroya.demo,类名Main,方法名print,代码如下:
Java代码&&
package&chroya.&&&&
import&android.app.A&&&&
import&android.os.B&&&&
import&android.util.L&&&&
class&Main&extends&Activity&{&&&&
&&&&@Override&&&&
&&&&public&void&onCreate(Bundle&savedInstanceState)&{&&&&
&&&&&&&&super.onCreate(savedInstanceState);&&&&
&&&&public&void&print(String&msg)&{&&&&
&&&&&&&&Log.d("Main",&"msg:"+&msg);&&&&
&&本包的调用Main的print方法的代码块如下:
Java代码&&
Context&c&=&createPackageContext("chroya.demo",&Context.CONTEXT_INCLUDE_CODE&|&Context.CONTEXT_IGNORE_SECURITY);&&&&
//载入这个类&&&&
Class&clazz&=&c.getClassLoader().loadClass("chroya.demo.Main");&&&&
//新建一个实例&&&&
Object&owner&=&clazz.newInstance();&&&&
//获取print方法,传入参数并执行&&&&
Object&obj&=&clazz.getMethod("print",&String.class).invoke(owner,&"Hello");&&&
&&ok,这样,我们就调用了chroya.demo包的Main类的print方法,执行结果,打印出了Hello。
怎么样,这只是一个调用其他包的代码的例子,我们获取到Context,还可以做很多事情,当然,题目所说的坏事,还是不要做为好
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 include iostream 的文章

 

随机推荐