IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++第六天 -> 正文阅读

[C++知识库]c++第六天

函数的基本知识

定义函数

//无返回值
void functionName ( parameterlist )
{
	dosomething;
	return;
}
//有返回值
typeName functionName ( parameterlist )
{
	dosomething;
	return value;
}

函数原型的作用

  • 编译器正确处理函数返回值
  • 编译器检查使用的参数数目是否正确
  • 编译器检查使用的参数类型是否正确,如果不正确,通过类型转换为正确的类型(如果允许的话)

c++ 函数原型中 括号为空与括号中使用void是等效的,c++不指定参数列表的做法是使用省略号:
void say (…);
较少用到,仅当与接收可变参数的c函数( printf() )交互时才会用到

函数参数和按值传递

  • 用于接收传递 值的变量被称为形参
  • 传递给函数的值被称为实参
    c++标准使用参数来表示实参,使用参量来表示形参。

函数和数组

int sum_arr(int *arr,int num);
int sum_arr(int arr[],int num);
//这两个函数声明都是正确的
/*
	在c++中,当且仅当在函数头中或函数原型中 typeName *pointName   ,typeName arrayName[]是等价的,都表示该参数应当传入一个对应类型的指针。
	并且可以使用pointName[index] 的方式和arrayName[index]方式来访问数据
区别:	数组表示法 提示用户,arr不仅指向int 还指向数组的第一个int ,当指针指向数组的第一个元素时,使用数组表示法
		当指向具体值的时候使用指针表示法
意味着:传递常规变量的时候函数将使用该值 的拷贝,但是传递数组的时候函数将使用原来的数组,传递的值是地址值
		节省了大量的拷贝数组元素的时间和内存。
		使用原始数据增加了破坏数据的风险,但是在c++可以使用const 规避。

*/

使用const 保护数组

void show_arr (const double arr[],int n);

const typeName arr []c++ 将其解释为 const typeName *arr ,说明arr指向的是一个常量值.这意味不能使用arr修改数据,也即是可以使用arr[0]这样的值,但是不能修改。注意这并不是意味着原始数组必须是常量,而是意味着不能在show_arr中修改这些数据,从而达到保护数组数据的目的。

指针和const

两种将const用于指针的方式:

  • 让指针指向一个常量,这样不能使用指针修改指向的值
  • 将指针本身声明为常量,这样可以防止改变指针的位置
int age = 39;
const int *pt = &age; //pt 指向一个const int 不能使用pt修改这个值
*pt += 1;             //error

/*微妙之处*/
*pt = 20 ;           //error
age = 20 ;           //true.const int *pt 并不是意味着pt指向的值就是一个常量,而是意味着对pt而言这个值是个常量,不能通过pt修改age,可以通过age直接修改age的值;

之前我们只遇到将常规变量的地址赋给常规指针,将常规变量赋值给const 指针。还有两外两种情况。

  • 将const 变量赋值给const 指针;允许;
  • 将const 变量赋值给常规指针;不允许;const int age = 10; int *pt = &age;age的值可以通过pt修改,违背age设为const 的初衷,c++禁止这种操作,可以通过强制类型转化突破这种限制;

问题升级到指针层面将更加复杂;

int age = 39;        //age = 20; 可以
int *pd = &age;      //*pd = 41; 可以
const int *pt = pd;	 //*pt = 42; 可以. 一级关系下 非const指针赋给const 指针是可以的,const 修饰符相当于没起作用

/*二级关系下*/
const int **pp2;  //*pp2指向一个const 地址
int *p1;
const int n = 3;
pp2 = &p1;  //如果可以的话
*pp2 = &n;	//可以,都是const 但是这样 set p1 point to n;
*p1 = 10;   //可以,因为p1指向的值是可以修改,最终我们改变了一个const 变量  所以在二级及以上间接关系下,不允许将非 const指针赋给const 指针

const的位置

int age =56;
const int *pt = &age; //pt指向的值不能通过pt修改
int* const pd = &age; //pd 指向的位置不可以变化,只能指向age
const int * const pc = &age;//pc只能指向age,且不能通过pc改变age

使用const 的好处

  • 避免无意间修改数据而改变程序
  • 条件允许,应将指针形参声明为指向const 的指针

函数和二维数组

难在声明

int sun(int (*arr)[4]);     //正确 arr是指针
int sun(int *arr[4]);       //错误arr是数组
int sun(int arr[][4],int rowNum); //正确 arr是指针

/*
int (*arr)[4] : 指向由四个int 组成的数组的指针;
int *arr[4] : 四个指向int 的指针组成的数组;

//对arr[r][c]的解释
arr  : 指向第一行(四个int组成的数组)
arr+r : 指向第r行(四个int组成的数组)
*(arr+r) : 第r行的那个数组的第一个元素的地址
*(arr+r)+c : 第r行的那个数组的第c个元素的地址
*(*(arr+r)+c) : 第r行的那个数组的第c个元素的值

*/

函数和c风格字符串

将c风格字符串传递给参数的三种方式

  • char 数组
  • 用引号括起来的字符串常量
  • 被设置为字符串地址的char 指针
    实际上都是char指针,将字符串作为参数传递实际上传递的都是字符串的第一字符的地址;(与数组的操作类似)

在处理的时候注意字符串末尾的空字符即可。(给它留个空间,利用它判断结尾)

函数和结构体

按值传递结构的时候,结构被当作普通变量,函数是使用的原始结构的副本。

函数和string对象

与在函数中使用结构更类似,
可以将一个string对象赋给另一个string对象;
可以将string作为完成的实体传递;
需要多个字符串可以使用string对象数组,而不是二维char数组。

函数指针

函数也有地址,是存储函数机器语言代码的内存的开始地址。
使用函数地址,使用函数名(不跟参数)即可,函数名即地址位置,要将函数作为参数传递,必须传递函数名。

声明函数指针:
通常要声明直向特定类型的函数的指针,可以先编写这种函数的原型,然后用(*函数指针名称)替换函数名,这样就能得到一个函数指针。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 08:54:26  更:2021-08-29 08:54:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:50:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码