C++基础之数组、指针与引用

一维数组的声明

```

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

```

常量表达式表示的是数组的个数,即数组的长度,且不能是变量。

一维数组的引用

```

数组名 [下标]

```

一维数组的初始化

1.逐个对元素赋值

```

char a[3]

a[0] = 'a'

a[1] = 'b'

a[2] = 'c'

```

2.聚合方式赋值

```

int a[12] = [1,2,3,4,5,6,7]

```

二维数组

```

数组类型 数组名 [常量表达式1][常量表达式2]

```

下标运算中的整数表达式代表数组每一个维的长度,乘积代表整个数组的长度。

二维数组的引用

```

数组名[下标][下标]

```

二维数组的初始化

```

a[0][1] = 12

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

```

字符数组

1.声明

char a[11]

2.赋值

a[0] ='a'

char a[] = ['a']

3.聚合方式只能在声明时使用。

4.字符数组不能给字符数组赋值

5.字符数组常做字符串使用,要有字符串结束符‘\0’

6.可以使用字符串给字符数组赋值

7.字符串处理函数:

字符串连接函数:stract()

```

stract(字符数组1,字符数组2)

```

功能:将字符数组2的字符串连接到字符数组1后,并删去字符串1的'\0'

字符串复制函数:strcpy()

stracpy(字符数组1,字符数组2)

功能:把字符数组2中的字符串复制到字符串1中,'\0也一起复制。'

字符串比较函数:strcmp()

```

strcmp(字符数组1,字符数组2)

```

功能:按照ASCII码顺序比较数组中的两个字符串,并将结果返回,若1>

2,返回一正数,1=2,返回0,1<2,返回一负数。

字符串长度测量函数:strlen()

```

strlen(字符串数组名)

```

功能:测量字符串的长度,不包括'\0',并返回结果

指针

1.代码中通过变量名对内存进行存取操作,代码编译后,将变量名转换为该变量在内存的存放地址,对变量值得存取都是通过地址进行的

2.一个变量的地址称为该变量的指针。

3.如果有一个变量专门用来存放另一个变量的地址,它就是指针变量

4.专门用来存放单元地址的变量类型,就是指针类型

5.指针是一种数据结构,通常所说的指针就是指针变量,它是一个专门用来存放地址的变量,而变量的指针主要指变量在内存中的地址。变量的地址在编写代码是无法获取,只有在程序运行时才可以得到。

指针的声明:

```

数据类型标识符 *指针变量名

```

6.指针的赋值:指针可以在初始化时赋值,也可以在后期赋值。

- 初始化赋值:

```

int i=100;

int *p=&i;

```

- 后期赋值:

```

int i=100;

p=&i;

```

7.通过一个变量名访问一个变量实战直接的,而通过指针访问一个变量时间接的。

8.指针变量名是p,而不是*p

p=&i :取变量i的地址赋给指针变量p

9.指针一定要有明确的指向

10.指针变量不可以直接赋值

11.不能将*p当变量使用

指针运算符和取地址运算符

1.*是指针运算符

2.&是取值运算符

3.自右向左运算

`&*p` :*p相当于变量a,再进行&运算,就相当于取变量a的地址

`*&a`:&a取变量a的地址,再进行*运算,相当于取变量a所在地址的值,即就是变量a

指针与数组

1.指针与一维数组

引用数组元素:下标法和指针法

指针引用数组:

```

int a[10]

int *p

p = &a[0]

```

2.指针与二维数组

```

int a[4][3]

int *p

p = &a[0]

```

1.a+n表示第n行的首地址

2.&a[0][0]可以看做0行0列的首地址,也可以看做二维数组的首地址

3.a[0]+n表示第0行第n个元素的地址

4. *(*(a+n)+m)表示第n行第m列元素

5.*(a[n]+m)表示第n行第m列元素

3.指针与字符数组

```

char *string = "www.mingri.book"

```

指向函数的指针

函数在编译时会被分配一个入口地址,这个函数入口地址就称为函数的指针

返回指针类型的值得函数简称为指针函数

```

类型名 *函数名(参数列表)

```

引用

```

数据类型 & 表达式

```

(1)一个引用被初始化后,无法使用它再去引用另一个对象,它不能被重新约束

(2)引用变量只是其他对象的别名,对它的操作与原来对象的操作具有相同作用

(3)指针变量与引用有两点主要区别:

- 一是指针是一种数据类型,而引用不是一个数据类型,指针可以转换为它所指向变量的数据类型,以便赋值运算符两边的类型相匹配;而在使用引用时,系统要求引用和变量的数据类型必须相同,不能进行数据类型转换。

- 二是指针变量和引用变量都用来指向其他变量,但指针变量使用的语法要复杂一些;而在定义了引用变量后,其使用方法与普通变量相同

(4)引用应该被初始化,否则会报错

使用引用过来传递参数

函数的参数传递分两种:值传递,引用传递

值传递:函数调用时,将实际参数的值赋值一份传递到调用函数中,这样如果在调用函数中修改了参数的值,不会影响到实际参数的值

引用传递则恰恰相反,调用函数修改了参数的值,改变会影响到实际参数。

指针传递参数

- 指针变量可以作为函数参数。

- 使用指针变量传递参数和使用引用传递参数方式的执行效果相同

数组做函数参数

如果传递的出纳室都是同一类型则可以通过数组的方式来传递参数,作为参数的数组可以是一维数组,也可以是多维数组

指针数组

一维指针数组的定义:

```

类型名 *数组名[数组长度]

```

指针数组中的数组名也是一个指针变量,该指针变量指向指针的指针