C++基础学习3

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-28 07:21:22

5数组

5.1数组概念

5.2一维数组

int a[10];

常量表达式中不能包含变量。

在定义数组时分别对数组元素赋予初值。

int a[10]={0,1,2,3,4,5,6,7,8,9};

在对全部数组元素赋初值时,可以不指定数组长度。

 int a[]={1,2,3,4,5};

5.3二维数组

类型标识符 数组名 [常量表达式] [常量表达式]

float a[3][4],b[5][10];

在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内

二维数组初始化 (一行对一行,界限清楚。 )

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

如果对全部元素都赋初值 ,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。

int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

5.4数组名作函数参数

数组元素作为函数的实参,与用变量作实参一样。

用数组名作函数参数,此时实参与形参都用数组名。 实参数组与形参数组类型应一致 ,用数组名作函数实参时, 只是将实参数组首元素的地址传递给形参。

用数组名作函数实参时,改变形参数组元素的值将同时改变实参数组元素的值

select_sort(a,10);

如果用二维数组名作为实参和形参,在对形参数组声明时,必须指定第二
维(即列)的大小,且应与实参的第二维的大小相同

int score[5][10];//实参
int array[3][10];//形参

在第二维大小相同的前提下,形参数组的第一维可以与实参数组不同,系统不检查第一维的大小。

5.5字符数组

char c[10]={′ I′ ,′ ′ ,′ a′ ,′ m′ ,′ ′ ,′ h′ ,′ a′ ,′ p′ ,′
p′ ,′ y′ };

花括号中提供的初值个数大于数组长度,则按语法错误处理。

只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值

遇到字符==′ \0′==就表示字符串到此结束,由它前面的字符组成字符串。

char str[]={″ I am happy″ };
或
char str[]=″ I am happy″ ;

字符数组的输入输出可以有两种方法:

(1) 逐个字符输入输出。
(2) 将整个字符串一次输入或输出。

char str[20];
cin>>str;//用字符数组名输入字符串
cout<<str; //用字符数组名输出字符串

字符串连接函数 :将第二个字符数组中的字符串连接到前面字符数组的字符
串的后面。

strcat(char[],const char[]);

字符串复制函数 ,将第二个字符数组中的字符串复制到第一个字符数组中去。

strcpy(char[],const char[]);

字符串比较函数 ,只参加比较而不应改变其内容,因此两个参数都加上const 声明。

strcmp(const char[],const char[]);

(1) 如果字符串 1=字符串 2,函数值为 0。
(2) 如果字符串 1>字符串 2,函数值为一正整数。
(3) 如果字符串 1<字符串 2,函数值为一负整数

字符串长度函数 ,测试字符串长度 。为字符串中的实际长度,不包括′ \0′在内。

strlen(const char[]);

5.6处理字符串的方法

字符串变量 ,使用时将string 头文件包含进来 。在定义字符串变量时不需指定长度,长度随其中的字符串长度而改变。

string string1; 
例如
string string2=″ China″ ; 

字符串变量的输入输出

cin>> string1; //从键盘输入一个字符串给字符串变量 string1
cout<< string2; //将字符串 string2 输出

string 类对象运算时,直接用简单的运算符

字符串数组 ,在字符串变量中存放的是字符串的地址

string name[5]; //定义一个字符串数组,它包含 5 个字符串元素
string name[5]={″ Zhang″ ,″ Li″ ,″ Fun″ ,″ Wang″ ,″ Tan″ };
//定义一个字符串数组并初始化

6指针

6.1指针概念

专门用来存放另一变量地址(即指针)的,则它称为指针变量。 指针变量的值(即指针变量中存放的值)是地址(即指针)。

6.2变量与指针

用*符号表示指向 ,i_pointer 是一个指针变量。*i_pointer 表示 i_pointer 所指向的变量。

指针变量 定义

基类型 指针变量名; ""不是指针变量名的一部分,在定义变量时在变量名前加一个“*”表示该变量是指针变量。

指针变量的基类型用来指定该指针变量可以指向的变量的类型。

将被指向的变量的地址赋给指针变量 。&为取地址符。

pointer_1=&i;//将变量 i 的地址存放到指针变量pointer_1 中
pointer_2=&j; //将变量 j 的地址存放到指针变量pointer_2 中

&*pointer_1 与&a 相同, *&a 与 a 等价 。

函数的参数 可以是指针类型。 作用是将一个变量的地址传送给被调用函数的形参。

虚实结合是采取单向的“值传递”方式,只能从实参向形参传数据,形参值的改变无法回传给实参 。

6.3数组与指针

int *p; 
p=&a[0];
或
p=a;

如果 p 的初值为&a[0]

  1. p+i (a+i)就是 a[i]的地址 。
  2. *(p+i)p+i 所指向的数组元素,即 a[i]。
  3. p[i]与*(p+i)等价。

(1)p++(或 p+=1)。 使 p 指向下一元素,即 a[1]。

(2) *p++。 先得到 p 指向的变量的值(即*p),然后再使 p 的值加 1。

(3)*(p++)*(++p)作用不同。 前者是先取p 值,然后使 p 加 1。 后者是
先使 p 加 1,再取
p。

(4) (*p)++表示 p 所指向的元素值加 1, 是元素值加 1,而不是指针值加 1。

(5) 如果 p 当前指向 a[i],则
*(p--)先对 p 进行“”运算,得到 a[i],再使 p 减 1,p 指向 a[i-1]。
*(++p)先使 p 自加 1,再作运算,得到 a[i+1]。
*(--p) 先使 p 自减 1,再作*运算,得到 a[i-1]。

*(*(a+i)+j)a[i][j]的值 。

int *p[4]; //定义一个指针数组,该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续再定义了

int (*p)[4]; //定义一个数组指针,该指针指向含4个元素的一维数组(数组中每个元素是int型)。

6.4字符串与指针

  1. 用字符数组存放一个字符串
  2. 用字符串变量存放字符串
  3. 用字符指针指向一个字符串

6.5函数与指针

  1. 用函数指针变量调用函数 。用一个指针变量指向 max 函数,然后通过该指针变量调用此函数。

    int (*p) (int,int);
    int max(int,int);//原函数
    

    只是用(*p)取代了 max,其他都一样。

  2. 用指向函数的指针作函数参数

double integral (double a,double b,double (*fun)(double)); 

6.6返回指针的值的函数

函数可以带回一个指针型的数据,即地址。

定义指针函数的一般形式为

int *a(int x,int y);

6.7指针数组和指向指针的指针

指针数组中的每一个元素相当于一个指针变量,它的值都是地址。

int *p[4];
p=*(name+i++);

*(name+i++)表示先求*(name+i)的值,即 name[i](它是一个地址)。 将它赋给p,然后 i 加 1。 最后输出以p地址开始的字符串。

指向指针的指针

char *(*p);或者
char **p;

利用指针变量访问另一个变量就是“间接访问”。 如果在一个指针变量中存放一个目标变量的地址,这就是“单级间址”, 指向指针的指针用的是“二级间址”方法。

6.8指针类型和运算小结

(1) 指针变量加/减 一个整数 。p+i 指向 p 下面的第 i 个元素。

(2) 指针变量赋值 。

p=&a; //将变量 a 的地址赋给 p
p=array; //将数组 array 首元素的地址赋给 p
p=&array[i]; //将数组 array 第 i 个元素的地址赋给 p
p=max; //max 为已定义的函数,将 max 的入口地址赋给
p
p1=p2; //p1 和 p2 都是同类型的指针变量,将 p2 的值赋给 p1

(3) 指针变量可以有空值。p=NULL;

(4) 两个指针变量可以相减 。两个指针变量值之差是两个指针之间的元素个数。p1+p2并无实际意义。

(5) 两个指针变量比较 。指向前面的元素的指针变量小于指向后面元素的指针变量。如果 p1p2 不指向同一数组则比较无意义。

6.9引用

引用是一种新的变量类型,它的作用是为一个变量起一个别名。

int a; //定义 a 是整型变量
int &b=a; //声明 b 是 a 的引用,a 或 b 的作用相同,都代表同一变量.

在声明一个引用类型变量时,必须同时使之初始化,即声明它代表哪一个变量。

引用后 ,不能再作为其他变量的引用(别名)。

C++之所以增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能。

(1) 将变量名作为实参和形参。

(2) 传递变量的指针。

(3)传送变量的别名。

#include <iostream>
using namespace std;
int main( )
{ void swap(int &,int &);
int i=3,j=5;
swap(i,j);//调用时不必用地址,直接用变量名
cout<<″ i=″ <<i<<″ ″ <<″ j=″ <<j<<endl;
return 0;
}
void swap(int &a,int &b) //形参是引用类型
{ int temp;
temp=a;
a=b;
b=temp;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!