当前位置 : 主页 > 编程语言 > c语言 >

轻松掌握C++!初学者必看——初阶基础(二)详解

来源:互联网 收集:自由互联 发布时间:2023-09-06
一、缺省参数 C++中可以为函数参数设置缺省值,这意味着在函数调用中未提供该参数时,将使用默认值。这样可以使函数调用更加简洁。 缺省参数可以大致分为:全缺省参数和半缺省

一、缺省参数

C++中可以为函数参数设置缺省值,这意味着在函数调用中未提供该参数时,将使用默认值。这样可以使函数调用更加简洁。

缺省参数可以大致分为:全缺省参数和半缺省参数

下面是一个例子:

#include <iostream>
using namespace std;
//全缺省参数
int sum(int a = 10, int b = 20) {
	int result;
	result = a + b;
	return (result);
}

//半缺省参数
int add(int a , int b=10) {
	int result;
	result = a + b;
	return (result);
}

int main() {
	int a = 100;
	int b = 200;
	int result;

	//  全缺省参数 使用参数a和b调用函数
	result = sum(a, b);
	cout << "Total value is :" << result << endl;

	// 使用参数a调用函数
	result = sum(a); //传递一个参数
	cout << "Total value is :" << result << endl;

	result = sum();  //不传参
	cout << "Total value is :" << result << endl;


	//半缺省参数
	result = add(10,20);
	cout << "Total value is :" << result << endl;
	result = add(10);
	cout << "Total value is :" << result << endl;
	// result = add(); 这个是不行的   
	cout << "Total value is :" << result << endl;

	return 0;
}

上面的代码输出结果为:

轻松掌握C++!初学者必看——初阶基础(二)详解_内联函数

我们可以看到,全缺省参数,在第二次调用函数时,只提供了一个参数a,但是由于b有默认值,所以程序仍然可以正常运行。第三次调用函数时,没有提供任何参数,a和b都有默认值,程序仍然能够运行。半缺省参数,传两个参数、一个参数都没有问题,不传参数是不行的,因为原来就只设置了一个靠右的缺省参数。

注意:半缺省参数顺序是从右往左,不可以进行间隔,如 int add(int a=10,int b)  这种情况会编译不过。

二、引用

引用提供了一个变量的别名,可以通过该引用来访问变量。使用引用可以使程序更加简洁。我们在语法上认为引用是不开辟空间,实际汇编底层还是用指针call来实现引用。 别名的改变就是本来变量的改变。

下面是一个例子:

#include <iostream>
using namespace std;

int main () {
   int i;
   double d;

   int& r = i;
   double& s = d;

   i = 5;
   cout << "Value of i : " << i << endl;
   cout << "Value of reference variable r : " << r  << endl;

   d = 11.7;
   cout << "Value of d : " << d << endl;
   cout << "Value of reference variable s : " << s  << endl;

   return 0;
}

上面的代码输出结果为:

Value of i : 5
Value of reference variable r : 5
Value of d : 11.7
Value of reference variable s : 11.7

在上面的代码中,我们定义了两个变量i和d,并定义了两个引用r和s,分别引用了i和d。在输出时,我们可以看到,引用r和s所引用的变量与i和d的值相同。

三、内联函数

内联函数是一种特殊的函数,它可以在调用处直接进行代码展开,没有建立函数栈帧,从而避免了函数调用的开销。关键字:inline,适合代码量小,而且本频繁调用的函数。

什么时候编译器不会会进行展开进行内联?

1.debug模式下,编译器默认是不会进行内联展开。

2.代码量大,运行流程复杂。(为了避免造成代码堆积)

注意点:

 inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址 了,链接就会找不到。

下面是一个例子:

#include <iostream>
using namespace std;

inline int max(int x, int y) {
   return (x > y)? x : y;
}

int main () {
   cout << "Max value is : " << max(4,7) << endl;
   return 0;
}

上面的代码输出结果为:

Max value is : 7

在上面的代码中,我们定义了一个内联函数max,该函数比较两个参数的大小,并返回较大的值。在主函数中,我们调用了这个函数,并直接输出了函数的返回值。

四、指针空值(nullptr)

C++11引入了一个新的关键字nullptr,用来表示空指针。在之前的版本中,通常使用NULL或0来表示空指针,但是它们有些缺陷,例如NULL有时候被定义为0,而0又可以隐式转换为其他类型,造成一些潜在的问题。

下面是一个例子:

#include <iostream>
using namespace std;

int main () {
   int *ptr = nullptr;
   cout << "The value of ptr is " << ptr << endl;
   if(ptr) {
      cout << "ptr is not null" << endl;
   } else {
      cout << "ptr is null" << endl;
   }
   return 0;
}

上面的代码输出结果为:

The value of ptr is 0
ptr is null

在上面的代码中,我们定义了一个空指针ptr,并输出了它的值。由于nullptr代表空指针,所以ptr的值为0。然后我们对这个指针进行了判断,发现它是空指针,所以输出结果为ptr is null。

五、测试完整代码

缺省参数代码:

#include <iostream>
using namespace std;
//全缺省参数
int sum(int a = 10, int b = 20) {
	int result;
	result = a + b;
	return (result);
}

//半缺省参数
int add(int a , int b=10) {
	int result;
	result = a + b;
	return (result);
}

int main() {
	int a = 100;
	int b = 200;
	int result;

	//  全缺省参数 使用参数a和b调用函数
	result = sum(a, b);
	cout << "Total value is :" << result << endl;

	// 使用参数a调用函数
	result = sum(a); //传递一个参数
	cout << "Total value is :" << result << endl;

	result = sum();  //不传参
	cout << "Total value is :" << result << endl;


	//半缺省参数
	result = add(10,20);
	cout << "Total value is :" << result << endl;
	result = add(10);
	cout << "Total value is :" << result << endl;
	// result = add(); 这个是不行的   
	cout << "Total value is :" << result << endl;

	return 0;
}

引用代码:

#include <iostream>
using namespace std;

int main () {
   int i;
   double d;

   int& r = i;
   double& s = d;

   i = 5;
   cout << "Value of i : " << i << endl;
   cout << "Value of reference variable r : " << r  << endl;

   d = 11.7;
   cout << "Value of d : " << d << endl;
   cout << "Value of reference variable s : " << s  << endl;

   return 0;
}

内联函数代码:

#include <iostream>
using namespace std;

inline int max(int x, int y) {
   return (x > y)? x : y;
}

int main () {
   cout << "Max value is : " << max(4,7) << endl;
   return 0;
}

指针空值代码:

#include <iostream>
using namespace std;

int main () {
   int *ptr = nullptr;
   cout << "The value of ptr is " << ptr << endl;
   if(ptr) {
      cout << "ptr is not null" << endl;
   } else {
      cout << "ptr is null" << endl;
   }
   return 0;
}
上一篇:2023 华为OD机试(C语言)真题
下一篇:没有了
网友评论