指针的概念与运算
- 指针的基本概念指针是一种变量,它存储的是另一个变量的内存地址。在C语言中,内存中的每个字节都有一个唯一的地址。就像你有一个邮箱,这个邮箱在邮局(内存)中有一个唯一的编号(地址),指针变量就是用来保存这个编号的。例如,我们有一个整型变量int num = 10;,在内存中num会占用一定的存储空间,这个存储空间有一个起始地址。如果我们定义一个指针变量int *p;,那么p就可以用来存储num的地址。
- 指针变量的定义和初始化定义:指针变量的定义格式为类型 *指针变量名;。例如,int *p;定义了一个名为p的指针变量,它可以用来指向一个整型变量。这里的*是一个说明符,表示p是一个指针变量。初始化:指针变量在使用之前最好进行初始化。可以将它初始化为一个已经存在的变量的地址。例如:
- 指针的运算算术运算: 当指针指向一个数组元素时,指针可以进行算术运算。如果p是一个指向数组元素的指针,p + 1并不简单地是地址值加1。而是根据指针所指向的数据类型的大小来增加地址。例如,如果p指向一个整型数组元素(在32位系统中,整型通常占4个字节),p + 1会使地址值增加4。同样,p - 1会使地址值减少sizeof(数据类型)。例如: 比较运算:指针可以进行比较运算,通常用于判断两个指针是否指向同一个数组中的元素,或者判断一个指针是否到达了数组的末尾。例如:
- 指针与数组的关系在C语言中,数组名在很多情况下可以看作是一个指针常量,它指向数组的第一个元素。例如,对于数组int arr[5];,arr和&arr[0]是等价的。我们可以使用指针来访问数组元素。例如:
- 多级指针多级指针就是指向指针的指针。例如,int **pp;,pp是一个二级指针。如果p是一个一级指针(指向一个整型变量),那么pp可以用来指向p。例如:
- 指针与函数指针可以作为函数的参数,这在函数需要修改外部变量的值或者返回多个值时非常有用。例如,函数swap用于交换两个整型变量的值: 函数也可以返回指针。例如,返回一个指向数组中最大元素的指针: