【C++ primer】第七章 函数-C++的编程模块
1,函数的基本知识
C++对于返回值的类型有一定的限制:不能是数组,但可以使其他任何类型,甚至可以使结构和对象。
有趣的是,虽然数组不可以作为返回对象,但是数组可以作为结构或对象组成部分来返回。
2,函数参数和按值传递
cin.get();//读取所有输入的字符,包括空格和换行符。
cin>> ;//跳过空格和换行符读取。
3,函数和数组
int arr[32];
int sum_arr(int arr[],int n);//参数arr是一个指针,而不是一个数组。
int sum_arr(int *arr,int n); //仅用于函数头,函数原型中 int *arr 跟 int arr[]的含义相同
恒等式:
arr[i] == *(arr+i); //值
&arr[i] == arr+i; //地址
4,数组名和指针对应的好处?
节省赋值整个数组所需的时间和内存
使用原始数据增加了破坏数据的风险
5,为什么需要传递数组长度?
不能通过sizeof(arr) 计算数组的长度。原因是sizeof(arr)只是指针变量的值。
6,重要的问题:在C语言中“&”的妙用
在C++程序声明变量的时候的&,只是表明“它是一个引用,这个引用声明时不开辟新空间,它在内存分配表加入新的一行,该行内存地址等于和调用时传入的对应参数内存地址”
例子:
#include "stdio.h" void inc(int *data) { (*data)++; } int main() { int a=0; inc(&a); //调用是关键 printf("%d\n",a); return 0 ; } #include"stdio.h" #include"malloc.h" #include"string.h" void TestFunction(char** ptr1, char*& ptr2) { *ptr1 = "abc"; ptr2 = (char*)malloc(6); strcpy(ptr2, "abc"); } int main() { char* ptr1 = NULL, *ptr2 = NULL; TestFunction(&ptr1, ptr2); printf("%s\n", ptr1); printf("%s\n", ptr2); free(ptr2); }
7,指针和const
1)指针指向一个常量对象:int age=39;
const int *pt=&age;
防止使用该指针来修改所指向的值。 不能用(*pt)++修改变量的值。但可以通过修改 age的值来更改 指针指向的值
pt可以指向另一个变量。
2)指针本身声明为常量:int *const pt;
pt可以用来修改值,pt不能指向其他变量。
【注意】C++禁止将const的地址赋给非const指针。
常量不能作为形参传递给非常量函数。
8,函数和C-风格字符串
1)字符串作为参数来传递,实际传递的是字符串的第一个字符的地址。
2)字符串内置结束符“/0”而字符数组没有
3)函数无法返回字符串,但可以返回字符串的地址。
9,函数和结构、String对象
1)函数可以返回结构,但是结构名只是名称,而不像数组名代表地址。要想获取地址只能使用地址操作符"&"
2)String 对象采用 getline(cin,str[i]);实例:
#include <iostream> #include <string> using namespace std; void display(const string s[],int n) { for(int i=0;i<n;i++) cout<<i+1<<":"<<s[i]<<endl; } int main() { string list[3]; for(int i=0;i<3;i++) getline(cin,list[i]); display(list,3); }10,函数指针
1)原理:将函数的地址当做参数传递给相应函数
2)测试源码:
#include <iostream> using namespace std; double besy(int lns) { return 0.05*lns; } double estimate(int lines,double (*pf)(int))//第二个形参含义为函数声明 double pm(int data) //只不过将函数名 pm替换成了 (*pf) //pf 是一个指向函数的指针 { cout<<lines<<"lines will take\n"; cout<<(*pf)(lines)<<" hour (s)\n"; } int main() { /*执行过程讲解: 函数实参为 lines=16 besy(lines=16) */ estimate(16,besy); } 11,总结
1)默认情况下,C++函数按值传递参数。意味着形参是新的变量,他们被初始化为函数调用所提供的值。因此C++通过使用拷贝,保护了原始数据的完整性。
2)使用函数的三个步骤:定义函数、提供原型、调用函数
3)*"tianshuai"表示的含义:t //"tianshuai"被解析为字符数组第一个元素的地址。而加上*表示取的一个元素的值
"tianshuai"[2] 表示 第三个元素 a //理由同上
转载于:https://www.cnblogs.com/JPAORM/archive/2012/02/22/2510041.html
【C++ primer】第七章 函数-C++的编程模块相关推荐
- C++PrimerPlus 第七章 函数-C++的编程模块-7.9 递归
目录 7.9 递归 7.9.1 包含一个递归调用的递归 7.9.2 包含多个递归调用的递归 7.9 递归 下面介绍一些完全不同的内容.C++函数有一种有趣的特点--可以调用自己(然而,与C语言不同的是 ...
- C++ Primer 第六章—— 函数 思维导图
C++ Primer 第六章-- 函数 思维导图 前言:该博文的定位是,您已经对C语言的基础知识和C++ Primer该书或C++知识有了基本了解.而在阅读C++ Primer(第五版)之后,感觉知识 ...
- 第5章 函数与函数式编程
第5章 函数与函数式编程 凡此变数中函彼变数者,则此为彼之函数. ( 李善兰<代数学>) 函数式编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以传入函数 ...
- 《Kotlin项目实战开发》第5章 函数与函数式编程
第5章 函数与函数式编程 凡此变数中函彼变数者,则此为彼之函数. ( 李善兰<代数学>) 函数式编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以传入函数 ...
- C++学习之路(六),C++primer plus 第七章 函数--C++的编程模块
第 7 章 函数---C++的编程模块 本章内容包括: 函数基本知识. 函数原型. 按值传递函数参数. 设计处理数组的函数. 使用 const 指针参数. 设计处理文本字符串的函数. 设计处理结构的函 ...
- c语言第七章函数笔记,我的C语学习笔记-C语言教程(七).doc
我的C语学习笔记- C语言教程(七) C语言教程---第一章: C语言概论 C语言教程---第二章: 数据类型.运算符.表达式 C语言教程---第三章: C语言程序设计初步 C语言教程---第四章: ...
- ask函数有几个形式参数HTML,第七章 函数
函数 关于模块化编程(C语言的程序模块称为函数),我们需要注意的几点. 1,没有子函数的概念.函数之间都是并列的关系,不能把一个函数定义到另一个函数的函数体中. 2,当定义在下面的函数,而上面代码已经 ...
- C++ primer 第七章之 友元函数与友元类
1.为什么需要友元函数? 类具有封装和信息隐藏的特性: 只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的 ; 非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公 ...
- python function at 0x00000_《fluent python》第七章 函数装饰器和闭包
前言 函数装饰器用于在代码中"标记"函数,以某种方式增强函数的行为. 想理解与掌握这一功能必须先理解闭包:除此之外,闭包还是回调式异步编程和函数式编程风格的基础 装饰器 装饰器是可 ...
最新文章
- js日期格式化Date
- 自定义对话框JDialog的使用实例
- 腾讯AI Lab开源世界首款自动化模型压缩框架PocketFlow:将深度学习装进口袋
- 经典面试题-Linux Kernel面试题
- java ajax实现分页代码,jQuery实现分页功能(含ajax请求、后台数据、附完整demo)...
- Java使用JDBC连接随意类型数据库(mysql oracle。。)
- VirtualBox Ubuntu个人配置
- VMware Workstation Pro 无法在Windows 上运行的 解决办法
- 推荐系统知识梳理——GBDTLR
- 杨潮观《偷桃捉住东方朔》
- Thinkphp新增字段无法插入到数据库问题
- ASP.NET MVC 3—一切的开始MvcHandler、MvcHttpHandler
- 2015.5.29日总结
- 使用Xtrabackup来备份你的mysql
- 研磨设计模式之《观察者模式observer》
- 利润表模板excel_Excel 最新财务报表分析模板(资产负债表、利润表、现金流量表…)...
- 用python做频数分析_如何用Python制作频率(频数)分布表(图)?
- 简要罗列通过Allegro绘制的PCB封装步骤
- MATLAB基础教程-台大郭彦甫-学习笔记
- 计算机英语词典 txt,9种Txt格式朗文英语词典免费分享
热门文章
- 火柴排队(codevs 3286)题解
- javascript学习笔记之入门
- 漫谈Google的Native Client(NaCl)技术(二)–技术篇(兼谈LLVM)
- 【SpringMVC笔记】Ajax 入门(jQuery.ajax)
- 【嵌入式实验】《嵌入式数据库 sqlite 移植及使用》
- 小程序入门学习08--云开发01
- jq使用教程01_最贴心教程,安装JQData全靠这篇指南
- 掌握这个分析方法,数据分析就学会了一半
- python多元回归 导出参数统计结果_如何从统计模型中WLS回归的二维参数得到检验的预测...
- cv2.error: opencv(4.4.0)_【OpenCV 4开发详解】图像连通域分析