指针
指针是c语言中的一个重要概念,也是c语言的一个重要特色。
地址和指针的概念
地址:在计算机中,内存被划分为许多小的存储单元,每个存储单元都有一个唯一的编号,这个编号就是地址。内存地址通常以十六进制形式表示。
指针:
指针变量:指针是一种特殊变量,它存储的是另一个变量的内存地址。指针变量的声明需要在其类型前加上星号,表示它是一个指针。
指针的值:指针变量的值是它所指向的变量的内存地址,通过指针变量,可以直接访问和操作它所指向的变量的值。
定义指针的一般形式为
int *p;
这里p是一个指针变量,可以存储整型变量的地址。 * 是类型说明符,int是基类型。
指针变量的命名规则于标识符相同。
指针初始化:
int i = 10;
int *p = &i;
这里&是取地址运算符,它返回i的地址,并赋值给p。
通过指针访问变量:
int i = 10;
p = &i;
*p = 100;
这里*是指针运算符,这段代码的运行结果是i的值变成了100。
指针常用作主调被调函数之间的参数传递,通过指针传参可以在被调函数中修改主调函数中的数据。
指针的工作过程可以分为三部:
1、通过指针变量中的值到内存空间中定位;
2、从定位处开始向后偏移sizeof(基类型);
3、将偏移好的那部分内存空间当作是一个基本型。
变量的指针和指向变量的指针变量
指针变量作为函数参数:函数的参数也可以是指针,它的作用是将一个变量的地址传送到另一个函数中。
程序举例:
以上是二分查找的代码,这个函数的返回值是一个指针,参数也是指针。
以上是选择排序的代码,可以看到a数组的第 i 项被表示为了*(a + i),这是因为*a表示数组的第0项,而且指针变量加1,表示地址向后偏移sizeof(基类型),这里基类型是int,地址偏移了4位,而int型数组的每一项在内存中也是占4个字节,所以a[i]也可以表示成*(a + i)。