C&C++ 指针算术运算仅支持 加减整数 和 同类型指针相减,运算结果会结合指针指向的数据类型大小自动缩放。

 

1. 指针加减整数

公式: p ± n  的实际偏移字节数 =  n × sizeof(*p) ,目的是保证指针始终指向同类型数据的有效地址。

 

int arr[] = {10,20,30};

int* p = arr; // 指向 arr[0]

p++; // 等价 p += sizeof(int),指向 arr[1]

int* q = p + 1; // 指向 arr[2]

 

 

注意:不能对  void*  做算术运算( sizeof(void)  无定义),也不能让指针越界后解引用。

2. 同类型指针相减

结果是两个指针之间的 元素个数差(而非字节差),常用于计算数组中元素的相对位置。

 

int arr[] = {1,2,3,4,5};

int* start = arr;

int* end = &arr[4];

int num = end - start; // 结果为 4,即两个指针间隔4个int元素

 

 

注意:只有两个指针指向同一数组/同一块连续内存时,相减才有实际意义。

3. 不支持的指针运算

 

- 指针之间不能做加法、乘法、除法运算。

- 不同类型指针(除非强转)不能直接相减或比较

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐