“指针变量”是指用来存放变量地址的变量。指针变量也是一个变量,它和其他变量的区别在于它里面存的不是普通的数据,而是另一个变量的地址。访问变量有两种方式,第一种是直接根据变量名称取到变量的地址,然后去对应内存地址拿到变量的值,这种方式叫做“直接引用”;第二种方式是定义一个指针变量指向变量,从指针变量中拿到变量的地址,再去对应内存地址拿到变量的值,这种方式叫做“间接引用”。
下面通过几张图片来看一下如何用指针表示一个变量,需要注意的是指针的数据类型必须和它所指向的变量的数据类型相同。
数组可以存储一组相同的数据元素,它们在内存中占用的是连续的内存空间(如下图所示),所以我们可以通过指针去遍历或者操作数组。
回文字符串是指正序和逆序读该字符串都是一样的字符串,因此可以定义两个指针,分别指向字符数组中的第一个字符和最后一个字符,然后依次向后或向前取出成对的字符,进行比较,代码如下图所示。
从上面的例子可以看出,通过指针start++、end--,可以遍历字符串中的字符。数组是占连续的存储空间,每个元素所占得字节数就是数组数据类型的字节数,所以实际上start++移动的字节数就是数组中元素所占的字节数,那么指针如何知道元素的数据类型呢?这就回到开头说到的,定义的指针的数据类型必须和它所指向的变量数据类型相同,换句话说,就是指针只能指向和它定义的数据类型相同的变量。
当我们把某个功能代码封装到函数中时,可以用指针作为参数,也可以用指针作为返回值。比如下图所示例子。
如上所示,在main函数中,由键盘输入了明文存到一个字符串中,然后调用encryption(char *)这个函数完成加密。要加密的内容存储在数组中,在调用函数的时候,需要将数组传入,这里是用指针来完成的。调用函数时传入的psw是数组的地址,被指针p_psw接收,称为指针变量的值,这个时候,就可以说指针p_psw指向了字符串数组的第一个字符。字符串是以‘/0’结尾的特殊的字符数组,所以通过指针++依次遍历字符串中每一个字符进行加密,直到指针指向‘/0’结束标志。在函数的结尾又将保留的字符串的首地址的指针作为返回值返回,实际上返回的p_temp是返回的字符数组的首地址。回到main函数,定义了一个新的指针接收返回值,其实就是让这个新指针p_new指向字符串第一个字符,所以通过puts(p_new)输出的就是加密之后的字符串。