在C语言指针中保存一个值的地址,所以可以对指针变量进行算术运算。 C语言中的指针可以进行以下算术运算:
- 递增
- 递减
- 加法
- 减法
- 比较
1.递增指针
在数组中使用递增指针是因为它是连续的内存位置。此外,经过计算我们可以知道下一个位置的值。
递增操作取决于指针变量的数据类型。递增指针的公式如下:
new_address= current_address + i * size_of(data type)
32位
对于32
位int
变量,它将增加到2
个字节。
64位
对于64
位int
变量,它将增加到4
个字节。
下面来看看看在64
位操作系统上增加指针变量的例子。创建一个源文件:increment-pointer.c,其代码如下 -
#include <stdio.h>
void main() {
int number = 50;
int *p;//pointer to int
p = &number;//stores the address of number variable
printf("Address of p variable is %u \n", p);
p = p + 1;
printf("After increment: Address of p variable is %u \n", p);
}
执行上面示例代码,得到以下结果 -
Address of p variable is 17824724
After increment: Address of p variable is 17824728
2.指针递减
与指针递增一样,我们可以递减一个指针变量。递减指针的公式如下:
32位
对于32
位int
变量,它将递减2
个字节。
64位
对于64
位int
变量,它将递减4
个字节。
我们来看看在64
位操作系统上递减指针变量的例子。创建一个源文件:decrement-pointer.c,其代码如下 -
#include <stdio.h>
void main() {
int number = 50;
int *p;//pointer to int
p = &number;//stores the address of number variable
printf("Address of p variable is %u \n", p);
p = p - 1;
printf("After decrement: Address of p variable is %u \n", p);
}
执行上面示例代码,得到以下结果 -
Address of p variable is 18218432
After decrement: Address of p variable is 18218428
3.指针相加
我们可以在指针变量上相加一个值。指针相加值的公式如下:
new_address= current_address + (number * size_of(data type))
32位
对于32
位int
变量,它将相加上2 * number
的值。
64位
对于64
位int
变量,它将增加4 * number
的值。
下面来看看看在64
位操作系统上相加一个值到指针变量的例子。创建一个源文件:addition-pointer.c,其代码如下 -
#include <stdio.h>
void main() {
int number = 50;
int *p;//pointer to int
p = &number;//stores the address of number variable
printf("Address of p variable is %u \n", p);
p = p + 3; //adding 3 to pointer variable
printf("After adding 3: Address of p variable is %u \n", p);
}
执行上面示例代码,得到以下结果 -
Address of p variable is 11926728
After adding 3: Address of p variable is 11926740
正如你所看到的,p
的地址是11926728
,但是在添加了3
与p
变量之后,它是11926740
,即4 * 3 = 12
增量。由于我们使用64
位操作系统,所以它会相加12
,但是如果使用32
位操作系统,它会相加6
,即2 * 3 = 6
。这是由于整数值占用32
位操作系统中的2
字节内存。
4.指针减法
类似于指针加法,我们可以从指针变量中减去一个值。下面给出了从指针变量中减去指定值的公式:
new_address= current_address - (number * size_of(data type))
32位
对于32
位int
变量,它将减去2 * number
的值。
64位
对于 64
位int
变量,它将减去4 * number
的值。
我们来看一下64
位操作系统从指针变量减去指定值的例子。
创建一个源文件:subtraction-pointer.c,其代码如下 -
#include <stdio.h>
void main() {
int number = 50;
int *p;//pointer to int
p = &number;//stores the address of number variable
printf("Address of p variable is %u \n", p);
p = p - 3; //subtracting 3 from pointer variable
printf("After subtracting 3: Address of p variable is %u \n", p);
}
执行上面示例代码,得到以下结果 -
Address of p variable is 17825120
After subtracting 3: Address of p variable is 17825108
从指针变量中减去3
后,可以看到比前一个地址值小12
,即:(4 * 3)
。