初学者在学习visual c++时问题很多,有意思的是,很多问题教材上都不说,后台有不少小伙伴问我相关问题,我于是总结一下。以供学习visual c++的小伙伴少走弯路。
问题六:怎么理解visual c++中函数的声明和定义
在复杂的程序中,如果全部的代码都写在main函数中,main函数体将非常庞大。把任务分工到其它的函数中,main函数只负责程序的核心流程,具体的任务由其它函数完成。这种思想就是模块化编程。
声明和定义函数的语法:
返回值的数据类型 函数名(参数一的数据类型 参数一, 参数二的数据类型 参数二,……)
{
实现函数功能的代码。
return 返回值;
}
函数的声明:让编译器知道函数的存在,包括返回值的数据类型、函数名和参数列表。
函数的定义:函数的实现过程。
注意:
-
函数的声明和定义可以写在一起,也可以分开。如果写在一起,一般放在main函数的上面。如果分开,一般在main函数的上面声明,在main函数的下面定义。
-
如果函数的声明和定义分开写,函数的声明后面一定要有分号,函数的定义后面一定不能写分号。
-
在同一个程序中,函数只需要声明和定义一次,也可以多次声明,但只能定义一次。
-
函数的声明必须和函数的定义一致(返回值的数据类型、函数名和参数列表),如果函数名和参数列表不同,表示它们不是同一个函数。
-
return语句返回值的数据类型必须与函数的声明一致。
-
在函数体中,return语句可以多次使用。
-
如果函数的重点是实现功能,不关心返回值,返回值的数据类型填void,return语句后面就空着。
-
函数可以没有任何参数。
-
函数名是标识符,必须满足标识符的命名规则。
在函数的声明和函数的定义中,参数命名可以不同,但是没必要这么写。
问题七:visual c++中函数如何调用?
语法:函数名(参数一,参数二,……)
注意:
-
声明函数的代码必须放在调用之前,定义函数的代码可以放在调用之后。
-
调用函数的时候,参数列表必须与函数的声明一致(参数的个数、顺序和数据类型)。
-
不管在什么地方都不能调用main函数,但是,在普通函数中,可以调用其它的普通函数。
-
调用函数的代码可以独占一条语句,也可以用于表达式(赋值运算、算术运算、关系运算、函数的参数)。
-
如果函数用于表达式中,返回值的数据类型要匹配(否则可能会被隐式转换或编译错误)。
问题八:如何visual c++中理解变量的作用域?
作用域是指程序中变量存在或生效的区域,超过该区域变量就不能被访问。
变量分全局变量和局部变量两种,全局变量在整个程序中都可以访问,局部变量只能在函数或语句块的内部才能访问。
Visual C++中定义变量的场景主要有五种:
1)在全部函数外面定义的是全局变量。
2)在头文件中定义的是全局变量。
3)在函数和语句块内部定义的是局部变量。
4)函数的参数是该函数的局部变量。
5)函数内部用static修饰的是静态局部变量。
1)全局变量
在整个程序生命周期内都是有效的,在定义位置之后的任意函数中都能访问。
全局变量在主程序退出时由系统收回内存空间。
2)局部变量
在函数或语句块内部的语句使用,在函数或语句块外部是不可用的。
局部变量在函数返回或语句块结束时由系统收回内存空间。
3)静态局部变量
用static修饰的局部变量生命周期和程序相同,并且只会被初始化一次。
其作用域为局部,当定义它的函数或语句块结束时,其作用域随之结束。
当程序想要使用全局变量的时候应该先考虑使用static(考虑到数据安全性)。
4)注意事项
全局变量和静态局部变量自动初始化为0。局部变量不会自动初始化,其值是不确定的,程序中应该有初始化局部变量的代码,否则编译可能会报错(不同的编译器不一样)。局部变量和全局变量的名称可以相同,在某函数或语句块内部,如果局部变量名与全局变量名相同,就会屏蔽全局变量而使用局部变量,如果想使用全局变量,可以在变量名前加::。for循环初始化语句中定义的变量的作用域是for语句块。
问题九:visual c++中函数如果需要返回不止一个值,怎么做?
调用函数的时候,调用者把数值赋给了函数的参数。
实参:调用者程序中书写的在函数名括号中的参数,可以是常量、变量和表达式。
形参:函数的参数列表。
在函数定义的代码中,修改形参的值,会不会影响实参。
visual c++中函数如果需要返回不止一个值的时候,请使用传地址的方法来改变程序中的变更。
问题十:visual c++中如何处理多文件的项目?
写一个项目程序应该把不同的程序写在不同的文件。
头文件(*.h):
需要包含的头文件,声明全局变量,函数的声明,数据结构和类的声明等。
源文件(*.cpp):
函数的定义、类的定义。
主程序:main函数,程序的核心流程,需要用#include "头文件名"把头文件包含进来。
编译:
Windows是集成开发环境,不需要写编译指令。
在Linux系统下,把全部的源文件一起编译,如:g++ -o demo demo.cpp tools.cpp others.cpp
可以看下面的例子
把一个程序拆成五个文件:
文件1:demo.cpp
代码:
#include "tools.h"
#include "person.h"
int main()
{
cout<<"max(5,10)="<<max(5,10)<<endl;
cout<<"mix(5,10)="<<mix(5,10)<<endl;
print(1,"努力学习。");
}
文件2:
person.cpp
代码:
#include "person.h"
viod print(int no,string str)
{
cout<<"学习成绩排名第"<<no<<"的同学请继续"<<str<<endl;
}
文件3:tools.cpp
代码:
#include "tools.h"
int max(int a,int b)
{
return a>b?a:b;
}
int min(int a,int b)
{
return a<b?a:b;
}
文件4:person.h
代码:
#pragma once
#include<iostream>
using namespace std;
void print(int no,string str);
文件5:tools.h
代码:
#pragma once
#include<iostream>
using namespace std;
int max(int a,int b);
int mix(int a,int b);
作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。