Pointer Operations
涉及的转换说明(conversion specification)
%p 指针
指针变量所涉及的基本操作:
1.赋值:可以将地址赋给指针(数组名赋给指针,带地址运算符(&)的变量名,另一个指针的值)
2.解引用:*运算符给出指针所指向地址上存储的值。
3.取址:指针变量也有自己的地址和值。&地址运算符可以给出指针本身的地址。
4.指针与整数相加:可以使用+运算符将指针和整数相加,或整数与指针相加。
相加规则是:整数 × 指针所指向类型的大小(以字节为单位)相乘 + 初始地址
5.递增指针:递增指向数组元素的指针可以让指针指向数组的下一个元素。
6.指针减去一个整数:可以用-运算符从一个指针减去一个整数。
减法规则是:初始地址 - 整数 × 指针所指向类型的大小(以字节为单位)
7.递减指针:递减指向数组元素的指针可以让指针指向数组的前一个元素。
8.指针求差:求差的两个指针分别指向同一个数组的不同元素,通过计算可以得出两元素之间的距离。
9.比较:使用关系运算符可以比较两个指针的值,但前提是两个指针都指向相同类型的对象。
# 注:int类型默认32位,即4个字节。地址也是以字节为单位。
The const Keyword
作用:用于限制一个变量为只读变量。
- 编写一个处理基本类型的函数时,对于数组来说,必须传递指针,这样效率高,但是会面临一个问题就是关于修改数组的问题。解决办法是通过使用指向const的指针,表明该函数不会通过指针来修改数据,如下:
int sum(const int ar[], int n); /* 函数原型 */
int sum(const int ar[], int n) /* 函数定义 */
{
int total = 0;
...
return total
}
- const可以创建const数组、const指针、指向const的指针。
# 说说const指针和指向const的指针
const double locked[4] = {1, 2, 3, 4}
const double * pc = rates; /* 指向const的指针 */
double * const pc = rates; /* const指针 */
const double * const pc = rates;
- 规律总结:
1.*左边有const意味着是指向const的指针,特点是不能使用指针来更改它所指向的值。
2.*右边有const意味着是const指针,特点是指针本身的值是不可变的。即指针指向的地址是一个固定值,那就不能改变指针所指向的地址。
3.如果const用了两次,则不能使用指针改变指向的值且指针指向的地址也不能变。
4.指向const的指针可以指向const数据和非const数据,但是普通指针不能指向const数据(不然就能通过指针操作const数据了)