如何轻松掌握C语言基础?初学者必看初阶基础(二)详解?

2026-04-11 22:351阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1874个文字,预计阅读时间需要8分钟。

如何轻松掌握C语言基础?初学者必看初阶基础(二)详解?

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

二、默认参数可以大致分为全缺省参数和半缺省参数。

1. 全缺省参数:所有参数都设置了默认值。

2.半缺省参数:部分参数设置了默认值,其他参数在调用时必须提供。

一、缺省参数

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; }

上面的代码输出结果为:

我们可以看到,全缺省参数,在第二次调用函数时,只提供了一个参数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,适合代码量小,而且本频繁调用的函数。

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

如何轻松掌握C语言基础?初学者必看初阶基础(二)详解?

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; }

本文共计1874个文字,预计阅读时间需要8分钟。

如何轻松掌握C语言基础?初学者必看初阶基础(二)详解?

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

二、默认参数可以大致分为全缺省参数和半缺省参数。

1. 全缺省参数:所有参数都设置了默认值。

2.半缺省参数:部分参数设置了默认值,其他参数在调用时必须提供。

一、缺省参数

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; }

上面的代码输出结果为:

我们可以看到,全缺省参数,在第二次调用函数时,只提供了一个参数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,适合代码量小,而且本频繁调用的函数。

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

如何轻松掌握C语言基础?初学者必看初阶基础(二)详解?

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; }