c++使用(函数)

本文介绍了C++中函数的声明和定义,强调了两者的位置和分号的使用规则。同时,讨论了函数调用、变量作用域,特别是局部变量和全局变量的优先级。此外,还提及了静态局部变量的特点以及函数参数的传递,包括实参和形参的概念。
摘要由CSDN通过智能技术生成

函数的声明和定义

  1. 函数的声明和定义可以书写在一起,也可以分开,如果书写在一起,一般放在main函数的上面,如果分开,一般在main函数的上面声明,在main函数的下面定义。
  2. 如果函数的声明和定义分开书写,函数的声明后面一定要有分号,函数的定义后面一定不能写分号。
  3. 在同一个程序中,函数只需要声明和定义一次,也可以多次声明,但只能定义一次。
  4. 函数的声明必须和函数的定义一致(返回值的数据类型、函数名和参数列表),如果函数名和参数列表不同,表示它们不是同一个函数。
  5. return语句返回值的数据类型必须与函数的声明一致。
  6. 在函数体中,return语句可以多次使用。
  7. 如果函数的重点是实现功能,不关心返回值,返回值的数据类型填void,return语句后面就空着。
  8. 函数可以没有任何参数。
  9. 函数名是标识符,必须满足标识符的命名规则。
  10. 在函数的声明和函数的定义中,参数命名可以不同,但是没必要这么书写。
#include <iostream>         // 包含头文件。
using namespace std;        // 指定缺省的命名空间(std::cout<<"aaa"<<endl)

// 写一个函数,给它两个整数,让它比较两个整数的大小,返回较大的那个整数。
int max(int a, int b);     // 函数声明后面的分号不能少。
// 写一个函数,给它一个字符串,让它在控制台显示出来。
void print(string str);   
// 写一个函数,在控制台输出九九乘法表。
void printmt();

int main()
{
    int a = 0;
	printmt();
    
}

int max(int a, int b)      // 函数定义后面不能加分号。
{
	if (a > b) return a;
	
	return b;
}

void print(string str)
{
	cout << str << endl;
	return;
}

void printmt()
{
	// 在控制台输出九九乘法表。
	for (int ii = 1; ii <= 9; ii++)
	{
		for (int jj = 1; jj <= ii; jj++)
		{
			cout << ii << "*" << jj << "=" << ii * jj << " ";
		}

		cout << endl;
	}

	return;
}

函数调用

  1. 声明函数的代码必须放在调用之前,定义函数的代码可以放在调用之后。
  2. 调用函数的时候,参数列表必须与函数的声明一致(参数的个数、书写的顺序和数据类型)。
  3. 不管在什么地方,都不能调用main函数,但是,在普通函数中,可以调用其它的普通函数。
  4. 调用函数的代码可以独占一条语句,也可以用于表达式(赋值运算、算术运算、关系运算、函数的参数)。
  5. 如果函数用于表达式中,返回值的数据类型要匹配(否则可能会被隐式转换或编译错误)。
  6. 如果函数有返回值,可以不关心它,忽略它。

变量作用域

1)在全部函数外面定义的是全局变量。

  • 在整个程序生命周期内都是有效的,在定义位置之后的任意函数中都能访问。
  • 全局变量在主程序退出时由系统收回内存空间

2)在头文件中定义的是全局变量。
3)在函数和语句块内部定义的是局部变量。

  • 在函数或语句块内部的语句使用,在函数或语句块外部是不可用的。
  • 局部变量在函数返回或语句块结束时由系统收回内存空间

4)函数的参数是该函数的局部变量。
5)函数内部用static修饰的是静态局部变量。

  • 用static修饰的局部变量生命周期和程序相同,并且只会被初始化一次
    其作用域为局部,当定义它的函数或语句块结束时,其作用域随之结束。
  • 当程序想要使用全局变量的时候应该先考虑使用static(考虑到数据安全性)。
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>         // 包含头文件。
using namespace std;        // 指定缺省的命名空间。


void func();    


int main()
{
	func();
    func();
    func();
    func();
    func();
}

void func()      // 函数定义后面不能加分号。
{
	int a = 10;
    static int b = 10;
    cout<<"a = "<<a++<<endl;
    cout<<"b = "<<b++<<endl;
    cout<<"---------------"<<endl;
	return;
}

在这里插入图片描述

就是说static修饰的变量只是在第一次被初始化,后面的调用都不会执行初始化b的操作,所以b一直累加(但是a就一直被初始化,不能累加)

注意:

  1. 全局变量和静态局部变量自动初始化为0。
  2. 局部变量不会自动初始化,其值是不确定的,程序中应该有初始化局部变量的代码,否则编译可能会报错(不同的编译器不一样)

在这里插入图片描述

局部变量和全局变量的优先级

  1. 局部变量和全局变量的名称可以相同,在某函数或语句块内部,如果局部变量名与全局变量名相同,就会屏蔽全局变量而使用局部变量,
  2. 如果想使用全局变量,可以在变量名前加两个冒号(::)

函数参数的传递

  1. 实参:调用者程序中书写的在函数名括号中的参数,可以是常量、变量和表达式。
  2. 形参:函数的参数列表。
    在函数定义的代码中,修改形参的值,会不会影响实参。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值