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++的编程模块相关推荐

  1. C++PrimerPlus 第七章 函数-C++的编程模块-7.9 递归

    目录 7.9 递归 7.9.1 包含一个递归调用的递归 7.9.2 包含多个递归调用的递归 7.9 递归 下面介绍一些完全不同的内容.C++函数有一种有趣的特点--可以调用自己(然而,与C语言不同的是 ...

  2. C++ Primer 第六章—— 函数 思维导图

    C++ Primer 第六章-- 函数 思维导图 前言:该博文的定位是,您已经对C语言的基础知识和C++ Primer该书或C++知识有了基本了解.而在阅读C++ Primer(第五版)之后,感觉知识 ...

  3. 第5章 函数与函数式编程

    第5章 函数与函数式编程 凡此变数中函彼变数者,则此为彼之函数. ( 李善兰<代数学>) 函数式编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以传入函数 ...

  4. 《Kotlin项目实战开发》第5章 函数与函数式编程

    第5章 函数与函数式编程 凡此变数中函彼变数者,则此为彼之函数. ( 李善兰<代数学>) 函数式编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以传入函数 ...

  5. C++学习之路(六),C++primer plus 第七章 函数--C++的编程模块

    第 7 章 函数---C++的编程模块 本章内容包括: 函数基本知识. 函数原型. 按值传递函数参数. 设计处理数组的函数. 使用 const 指针参数. 设计处理文本字符串的函数. 设计处理结构的函 ...

  6. c语言第七章函数笔记,我的C语学习笔记-C语言教程(七).doc

    我的C语学习笔记- C语言教程(七) C语言教程---第一章: C语言概论 C语言教程---第二章: 数据类型.运算符.表达式 C语言教程---第三章: C语言程序设计初步 C语言教程---第四章: ...

  7. ask函数有几个形式参数HTML,第七章 函数

    函数 关于模块化编程(C语言的程序模块称为函数),我们需要注意的几点. 1,没有子函数的概念.函数之间都是并列的关系,不能把一个函数定义到另一个函数的函数体中. 2,当定义在下面的函数,而上面代码已经 ...

  8. C++ primer 第七章之 友元函数与友元类

    1.为什么需要友元函数?  类具有封装和信息隐藏的特性: 只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的 ; 非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公 ...

  9. python function at 0x00000_《fluent python》第七章 函数装饰器和闭包

    前言 函数装饰器用于在代码中"标记"函数,以某种方式增强函数的行为. 想理解与掌握这一功能必须先理解闭包:除此之外,闭包还是回调式异步编程和函数式编程风格的基础 装饰器 装饰器是可 ...

最新文章

  1. js日期格式化Date
  2. 自定义对话框JDialog的使用实例
  3. 腾讯AI Lab开源世界首款自动化模型压缩框架PocketFlow:将深度学习装进口袋
  4. 经典面试题-Linux Kernel面试题
  5. java ajax实现分页代码,jQuery实现分页功能(含ajax请求、后台数据、附完整demo)...
  6. Java使用JDBC连接随意类型数据库(mysql oracle。。)
  7. VirtualBox Ubuntu个人配置
  8. VMware Workstation Pro 无法在Windows 上运行的 解决办法
  9. 推荐系统知识梳理——GBDTLR
  10. 杨潮观《偷桃捉住东方朔》
  11. Thinkphp新增字段无法插入到数据库问题
  12. ASP.NET MVC 3—一切的开始MvcHandler、MvcHttpHandler
  13. 2015.5.29日总结
  14. 使用Xtrabackup来备份你的mysql
  15. 研磨设计模式之《观察者模式observer》
  16. 利润表模板excel_Excel 最新财务报表分析模板(资产负债表、利润表、现金流量表…)...
  17. 用python做频数分析_如何用Python制作频率(频数)分布表(图)?
  18. 简要罗列通过Allegro绘制的PCB封装步骤
  19. MATLAB基础教程-台大郭彦甫-学习笔记
  20. 计算机英语词典 txt,9种Txt格式朗文英语词典免费分享

热门文章

  1. 火柴排队(codevs 3286)题解
  2. javascript学习笔记之入门
  3. 漫谈Google的Native Client(NaCl)技术(二)–技术篇(兼谈LLVM)
  4. 【SpringMVC笔记】Ajax 入门(jQuery.ajax)
  5. 【嵌入式实验】《嵌入式数据库 sqlite 移植及使用》
  6. 小程序入门学习08--云开发01
  7. jq使用教程01_最贴心教程,安装JQData全靠这篇指南
  8. 掌握这个分析方法,数据分析就学会了一半
  9. python多元回归 导出参数统计结果_如何从统计模型中WLS回归的二维参数得到检验的预测...
  10. cv2.error: opencv(4.4.0)_【OpenCV 4开发详解】图像连通域分析