指针是函数参数传递的重要工具。
通过指针作为函数参数的方法,既可以返回多个运算结果,又可以避免使用全局变量!
(1).作为形参
使用一个函数求a,b的平方和、自然对数和、几何平均数、和的平方根:
一个量通过return返回,其他三个值通过指针返回!
传递数组的地址,数组的长度
求数组n个元素的平均值
因此,有四种情况:
1.形参——数组名、实参——数组名;2.形参——指针变量、实参——数组名;
3.形参——指针变量、实参——指针(提前放好数组名);4.形参——数组名、实参——指针。
自定义字符串复制函数:
数组名数组第0个元素的地址整个数组的地址
因此,数组名是一个地址常量!
p=a; <> p=&a[0];
那么访问数组元素a[i],下列写法一致:
a[i] <> p[i] <> ∗ ( a + i ) *(a+i) ∗(a+i) <> ∗ ( p + i ) *(p+i) ∗(p+i)
因此,遍历数组中的元素,有多种写法:
1.下标法;2.通过地址间接访问数组元素;3.通过指向数组的指针变量间接访问元素;
char *p="C Language"; %计算机自动用一个未命名的字符数组来存放“C Language”;且p指向这个字符数组。
#17. 指针
一般函数只能用return返回一个值;利用数组可以返回相同类型的多个值;利用指针可以实现返回不同类型的多个值。
指针是服务于函数的!!尤其是函数之间。
int a,b,*p1=&a,*p2; %则,&*p1 = &a =p1; *&a = *p1 = a;
指针类型==对应计算机的字节地址编码;
对象:占据一定的存储空间,有确定的存储位置!编译器将程序中的对象名转换成机器指令能识别的地址,通过地址来存取对象。
无效指针:
1.NULL;2.未初始化;3.迷途指针
指针的运算必须作用在连续的存储空间上才有意义。(连续空间是指,类似于数组所占地的存储空间)
C++标准库 兼容了C语言的字符串处理函数,头文件为 string.h
数组的长度 为字符的长度 + 1;
"a"; % 双引号内 是字符串,字符串必须用 数组来存放。
'a'; % 单引号内 是字符
空字符 \0 为 字符串结束标志。
完全可以替代C语言的字符数组,且功能更强大。动态长度。
#include ;
string str1, str2="Java",str3("C++"); %str3为对象直接初始化;str2为C风格字符串转换为字符串对象
cin >> str1; %输入
cout << str2; %输出
str1 = str2+str3; %连接
str1 == "ABC"; %比较
str.size(); %成员函数
string Xing[5]={"Jiang","Cao","Xu","Zhao","Lu"} %字符串对象数组
数组的元数作为函数的参数,与一般变量无区别,属于值传递;
数组名作为函数的参数,传递的是数组的首地址,就是同一个数组。
形参数组就是是参数组。(且形参的长度并非必须)
多维数组仅第一维可以省略,且其他维必须和实参相同。
寻找二维数组的最大值,和最大值对应的下标
计算数组所有元素的平均值
int A[5]; %定义的时候方括号里写的是数组的长度;必须是常量表达式
A[2]; %引用的时候方括号里写的是下标。可以是变量
本质上,C++的多维数组都是一维数组,这是由内存形式的线性排列决定的。
且按行存放。
二维数组的循环遍历:
C++程序设计-西北工业大学-魏英、姜学锋、刘君瑞 视频