C++有关大自然的问题问题

51CTO旗下网站
有关C++参数问题解析
当一个函数带有多个C++参数时,C++语言没有规定在函数调用时实参的求值顺序,而编译器根据对代码进行优化的需要自行规定对实参的求值顺序。
作者:佚名来源:清华大学出版社| 13:15
所谓C++参数的说明,其实是对指定应用而言,它可以是赋予的常数值,在泛指时,它可以是一种变量,用来控制随其变化而变化的其他的量,换句话说,其实参数就是给我们参考的。
该程序中,在fun()函数中,使用了引用作形参,调用时所对应的实参应该是一个数组名,这里的引用是给数组起个别名。在fun()函数中对数组b的操作,就相当于b所引用数组a的操作。
在中,常用这种调用方式。& 实例:#include&&& &typedef&int&array[8];&& &int&a[8]&=&{1,&3,&5,&7,&9,&11,&13};&& &void&fun(array&&b,&int&n)&& &{&& &for(int&i=0;&i;&i++)&& &b[7]+=b[i];&& &}&& &&void&main()&& &{&& &int&m=8;&& &fun(a,&m);&& &cout[7];&& &}&&&
函数参数的求值顺序&
当一个函数带有多个参数时,C++语言没有规定在函数调用时C++参数的求值顺序。而编译器根据对代码进行优化的需要自行规定对实参的求值顺序。有的编译器规定自左至右,有的编译器规定自右至左,这种对求值顺序的不同规定.
对一般参数来讲没有影响。但是,如果实参表达式中带有副作用的运算符时,就有可能产生由于求值顺序不同而造成了二义性。例如:int z = add_int(++x, x+y);,这样,在不同的编译器就有可能生产不同的结果。&
设置参数的默认值&
在C++语言中,允许在函数的说明或定义时给一个或多个参数指定默认值。但是,要求在一个指定了默认值的参数的右边,不能出现没有指定默认值的参数,在上述对函数add_int()的说明中,对该函数的最右边的一个参数指定了默认值。&
在函数调用时,编译器按从左至右的顺序将实参与形参结合,当实参的数目不足时,编译器将按同样的顺序用说明中或定义中的默认值来补足所缺少的实参。例如,如有下列的函数调用表达式:&&&
在给某个参数指定默认值是,不仅可以是一个数值,而且还可以是任意复杂的表达式。使用数组作函数参数数组作函数参数可以分为如下三种情况:(这三种情况的结果相同,只是所采用的调用机制不同)&
1. 形参和实参都用数组&
调用函数的实参用数组名,被调用函数的形参用数组,这种调用的机制是形参和实参共用内存中的同一个数组。因此,在被调用函数中改变了数组中某个无素的值,对调用函数该数组的该元素值也被改变,因为它们是共用同一个数组。&
2. 形参和实参都用对应数组的指针&
在C++参数中,数组名被规定为是一个指针,该指针便是指向该数组的首元素的指针,国为它的值是该数组首元素的地址值,因此,数组名是一个常量指针。& 实际中,形参和实参一个用指针,另一个用数组也是可以的。在使用指针时可以用数组名,也可以用另外定义的指向数组的指针。&
3. 实参用数组名形参用引用&
如何对数组类型使用引用方式,这里先做如下说明:先用类型定义语句定义一个int型的数组类型,如下所示: 然后,使用array来定义数组和引用。&
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条热点头条关注热点
24H热文一周话题本月最赞
讲师:90376人学习过
讲师:161142人学习过
讲师:16378人学习过
精选博文论坛热帖下载排行
本书非常详细而全面地介绍了C#程序设计语言。本书不是“5分钟学习C#”式的手册,也不是那种教您“照猫画虎”地创建一些与您的实际工作需要...
订阅51CTO邮刊热门推荐说明
根据读者的反馈,系统自动将深受大家喜爱的文章推荐给更多读者阅读。
开发经验文章说明
开发经验类文章是在实战开发过程中对各种问题和实现方法进行的经验总结。
C++入门教程说明
我们的注重学习者的思考,以自学者的角度深入浅出帮助学会C++。
Win32入门教程说明
每一节课都是深入研究MSDN和实践验证得来,来之不易。
C语言教程说明
非常简明的浓缩了C语言的知识,可以帮助你迅速上手C语言。
Linux编程入门说明
分为Shell脚本编程(类似DOS脚本)和应用程序编程(win32程序)。
在线提问 问题标题: 问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)C和C++混合编程问题
转载 &更新时间:日 21:31:46 & 投稿:mdxy-dxy
这篇文章主要介绍了C和C++混合编程问题,需要的朋友可以参考下
分析以下一段代码:
/*=======sum.h=========*/
#ifndef SUM_H
#define SUM_H
#include &stdio.h&
int sum(int a,int b);
/*=======sum.c=========*/
#include "sum.h"
int sum(int a,int b)
int c=a+b;
/*====main.cpp======*/
#include "sum.h"
void mian(){
cout && sum(1,2)&&
调用以上三个文件,编译通过,但是执行是出现以下问题:
obj : error LNK2001: 无法解析的外部符号 "int __cdecl sum(int,int)" (?sum@@YAHHH@Z)
E:\Programming\Grapic\test\Debug\test.exe : fatal error LNK1120: 1 个无法解析的外部命令
问题出在哪里呢? 在main.cpp里调用了sum.c,也就是说在C++程序里调用了C程序,此时如果没有作相应处理将会出现链接错误。
extern "C"表示编译生成的内部符号名使用C约定。C++支持函数重载,而C不支持,两者的编译规则也不一样。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为:void foo( int x, int y ); 该函数被C编译器编译后在符号库中的名字可能为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。
那么如果在C中调用C++代码,以及如何在C++中调用C的代码呢?
extern "C"表示编译生成的内部符号名使用C约定。
1. 如何在C++中调用C呢?
C++调用C,extern "C" 的作用是:让C++连接器找调用函数的符号时采用C的方式
本文开头提出的笔试题可以这样修改:
/*=======sum.h=========*/
#ifndef SUM_H
#define SUM_H
#include &stdio.h&
int sum(int a,int b);
/*=======sum.c=========*/
#include "sum.h"
int sum(int a,int b)
int c=a+b;
/*====main.cpp======*/
extern "C"
#include "sum.h"
void mian(){
cout && sum(1,2)&&
相信到这里差不多明白了
2. 怎样在C里调用C++呢?
在C中引用C++函数(C调用C++,使用extern "C"则是告诉编译器把cpp文件中extern "C"定义的函数依照C的方式来编译封装接口,当然接口函数里面的C++语法还是按C++方式编译)
执行:test1.obj : error LNK2019: 无法解析的外部符号 _sum,该符号在函数 _main 中被引用
E:\Programming\Grapic\test\Debug\test.exe : fatal error LNK1120: 1 个无法解析的外部命令
/*=======sum.h=========*/
#ifndef SUM_H
#define SUM_H
#include &stdio.h&
int sum(int a,int b);
/*=======sum.cpp=========*/
#include "sum.h"
extern "C"
int sum(int a,int b)
int c=a+b;
/*====main.c======*/
#include "sum.h"
void mian(){
cout && sum(1,2)&&
3. 标准规范写法
一般我们都将函数声明放在头文件,当我们的函数有可能被C或C++使用时,我们无法确定被谁调用,使得不能确定是否要将函数声明在extern "C"里,所以,我们可以添加
#ifdef __cplusplus
extern "C"
//函数声明
#ifdef __cplusplus
利用以上声明形式就可以综合运用了。
在C中引用C++语言中的函数和变量时,C++的函数或变量要声明在extern "C"{}里,但是在C语言中不能使用extern "C",否则编译出错。(出现错误: error C2059: syntax error : 'string',这个错误在网上找了很久,国内网站没有搜到直接说明原因的,原因是extern "C"是C++中的关键词,不是C的,所有会出错。
/*=======sum.h=========*/
#ifndef SUM_H
#define SUM_H
#include &stdio.h&
int sum(int a,int b);
/*=======sum.cpp=========*/
#include "sum.h"
int sum(int a,int b)
int c=a+b;
/*====main.c======*/
#include "sum.h"
void mian(){
cout && sum(1,2)&&
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具关于C++学习中的一些疑问
请求各位老师予以指点和帮助目的说明:鄙人是C++初学者。本着“学以致用,带着问题去学习”的态度去学习。因此,在学习的同时,刚好手头上有一些日常需要按固定步骤来操作的工作。现在想利用C++语言写一个程序,将这些多个步骤的工作一步实现。这样,以来可以提高自己以后的工作效率,二来,可以通过这个程序的编写使自己能快速的熟悉和掌握部分C++语言编写技巧。目前工作流程说明:1、每天会在当月的文件夹下建立一个新的文件夹,文件夹名称按照当天日期命名。该文件夹每天会拖入当天的有固定格式命名的文件(文件名称格式:客户姓名+型号+数量+文件名),当文件处理完成后,将该文件拖入当天文件夹下的命名为“已发”的文件夹中。(路径:H:\\2018\5月\1\已发\文件名)2、每月月末时,利用DOS下的DIR命令将本月每日已发中的文件名导出成以当日命名的n.txt文件。(比如:5月1日已发的文件名会生成H:\\2018\5月\1.txt)3、利用DOS下的“type
*.txt &&H:\\2018\5月\a.txt"
将每日的txt文档合并成一个名为a.txt的文档。4、在excel中,用数据导入功能将合并后的a.txt文档导入到excel中生成表格。5、利用excel中的vlookup函数依据文件名中的关键字,将客户名称、型号、数量、文件名等分列显示。6、利用excel中的筛选功能再复制成以客户名称为名称的当月对账单。请问:1、以上工作可以通过C++编写程序一步实现吗?2、我需要从那些知识入手?(目前现有的资源:Visual Studio 2012已经安装
手机上已安装C++参考手册)
你这个想法很好。用实际项目来练习是最好的学习方式。关于你描述的这个工作流程,我有些不太清楚的地方。第 4、5 步骤中,一定要利用 excel 吗? 或者说,一定要生成这些 xls 中间文件吗:是你的工作流程中必须保留这些“中间”文件?还是说,你目前的流程仅仅是利用 excel 来帮助你整理这些数据,你实际上只需要最后第 6 步的那个对账单?因为处理数据(如你说的 vlookup 查找之类的)可以同时用 C++ 处理,完全能省略掉中间用 excel 处理的步骤,只要最后输出你想要的 xls 文件即可。说些可能是要点的细节:第 1 步中每日文件处理是人工进行的吗?
当然如果处理流程固定程式化,你也可以用 C++ 程序来处理,只是你需要每日手动执行下程序(亦或是考虑每日工作结束时定时处理...)其实前三步主要的文件和目录操作都可以用 C++ 来做。文件处理是很基本的功能,实现起来很容易。至于目录操作,过去 C++ 标准库中是没有这个功能的。因为目录操作在不同操作系统上区别很大,你要用系统相关的方式来实现,或者用第三方函数库来实现。好消息是新的 C++ 标准库中增加的目录操作的内容。所以如果你用的编译器/IDE够新的话,也可以直接用标准库做这个。有很多第三方库可以读写 xls/xlsx 文件,最终创建对账单可以用这种方式实现。看到你最后的问题:单纯从 IDE 角度来说,我不建议使用 Visual Studio 2012。如果很想用微软的 VS 系 IDE 的话,可以用最新的 VS 社区版(https://www.visualstudio.com/vs/community/),其遵循的 C++ 标准更新、也更好用,而且对个人用户免费。当然,你应该详查许可条款以避免法律风险,如果你现有的 VS2012 是正版的那就继续用吧,我不知道有多少人在意这些...另外,关于 C++ 入门学习。对于完全没有编程经验的人:我首推一本书 "Programming: Principles and Practice using C++ (Second Edition)",而且最推荐看第 2 版。 不过这本目前似乎没有中译版...其次推荐 "C++ Primer",只推荐看目前最新的第 5 版。这本有中译版。
注意不要错选了叫"C++ Primer Plus"的,那是本“套牌书”...
你还没有登录,请先登录或注册慕课网帐号
14650人关注
Copyright (C) 2018 imooc.com All Rights Reserved | 京ICP备 号-11版面简介:讨论C/C++相关技术。
总数:5000,共100页
最后更新时间
最后更新时间
总数:5000,共100页

我要回帖

更多关于 有关密码的数学问题 的文章

 

随机推荐