1、指针自增
指针自增是指使用自增运算符 (++
) 来修改指针的值,使其指向下一个内存地址。指针的自增操作依赖于指针所指向的数据类型的大小。在程序中使用指针代替数组,因为变量指针可以自增,而数组不能自增,数组可以看成一个指针常量。以便顺序访问数组中的每一个元素。
例如,
#include <iostream>
using namespace std;
const int MAX = 3;
int main ()
{
int var[] = {10, 50, 300};
int i, *ptr;
/* 指针中的数组地址 */
ptr = var;
for ( i = 0; i < MAX; i++)
{
printf("存储地址:var[%d] = %p\n", i, ptr );
printf("存储值:var[%d] = %d\n", i, *ptr );
/* 指向下一个位置 */
ptr++;
}
return 0;
}
2、指针自减
指针自减(--
操作符)是指将指针移动到内存中前一个元素的位置。这个操作基于指针指向的数据类型大小进行调整。在程序中使用指针循环遍历数组,还可以使用变量指针进行自减。
例如,
#include <iostream>
using namespace std;
const int MAX = 3;
int main ()
{
int var[] = {10, 40, 200};
int i, *ptr;
/* 指针中最后一个元素的地址 */
ptr = &var[MAX-1];
for ( i = MAX; i > 0; i--)
{
printf("存储地址:var[%d] = %p\n", i-1, ptr );
printf("存储值:var[%d] = %d\n", i-1, *ptr );
/* 指向下一个位置 */
ptr--;
}
return 0;
}
3、指针的加法和减法
指针加法将指针加上一个整数值时,指针会移动到后续元素的位置。增加的值是基于指针所指向的数据类型的大小(以字节为单位)。对于 int*
指针,每次加 1 表示增加 sizeof(int)
个字节。对于 double*
指针,每次加 1 表示增加 sizeof(double)
个字节。指针减法将指针减去一个整数值时,指针会移动到前面的元素位置。
#include<iostream>
using namespace std;
int main() {
int arr[] = {10, 20, 30, 40, 50};
int* ptr = arr; // 指向数组的第一个元素
std::cout << "Initial pointer value: " << *ptr << "\n";
ptr++; // 移动到下一个元素
std::cout << "After ptr++: " << *ptr << "\n";
ptr += 2; // 再向前移动两个元素
std::cout << "After ptr += 2: " << *ptr << "\n";
ptr--; // 移动到前一个元素
std::cout << "After ptr--: " << *ptr << "\n";
ptr -= 2; // 回到起始位置
std::cout << "After ptr -= 2: " << *ptr << "\n";
return 0;
}
4、比较指针
指针变量除了可以参与加减运算,还可以参与比较运算,如 ==
、<
和 >
。当对指针变量进行比较运算时,比较的是指针变量本身的值,也就是数据的地址。如果地址相等,那么两个指针就指向同一份数据,否则就指向不同的数据。
例如,
#include <iostream>
using namespace std;
const int MAX = 3;
int main ()
{
int arr[] = {10, 20, 30, 40, 50};
int* ptr1 = &arr[1]; // 指向第二个元素
int* ptr2 = &arr[3]; // 指向第四个元素
// 比较指针
if (ptr1 < ptr2) {
std::cout << "ptr1 is before ptr2 in memory\n";
} else {
std::cout << "ptr1 is not before ptr2 in memory\n";
}
int var[] = {10, 80, 190};
int i, *ptr;
/* 指针中第一个元素的地址 */
ptr = var;
i = 0;
while ( ptr <= &var[MAX - 1] )
{
printf("存储地址:var[%d] = %p\n", i, ptr );
printf("存储值:var[%d] = %d\n", i, *ptr );
/* 指向下一个位置 */
ptr++;
i++;
}
return 0;
}
5、指针之间的距离
指针相减可以计算两个指针之间的距离(以元素为单位)。这通常用于数组中,计算两个元素之间的偏移量。指针之间的距离可以通过指针的减法操作来计算。指针的减法计算的是两个指针所指向元素之间的偏移量,结果以 元素的数量 表示,而不是以字节数表示。
#include <iostream>
using namespace std;
int main() {
int arr[] = {10, 20, 30, 40, 50};
int* ptr1 = &arr[1]; // 指向第二个元素
int* ptr2 = &arr[4]; // 指向第五个元素
// 计算两个指针之间的距离
// 使用 ptrdiff_t 类型
std::ptrdiff_t distance = ptr2 - ptr1;
std::cout << "Distance between ptr1 and ptr2: "
<< distance << "\n";
return 0;
}