两个指针相减问题
在C语言中,两个指针相减的结果表示的是两个指针之间的元素数量,而不是地址的差值。这在处理数组和指针操作时非常有用。接下来,我将通过两个例子来详细说明这一点,一个简单的数组例子和一个涉及结构体的复杂例子。
简单数组例子
假设我们有一个 int
类型的数组 arr
,以及两个指向该数组元素的指针 p
和 q
。以下是一个具体的例子:
int arr[5] = {10, 20, 30, 40, 50};
int *p = &arr[4]; // 指向数组的最后一个元素
int *q = &arr[1]; // 指向数组的第二个元素
在这个例子中,指针 p
指向数组的第4个元素,q
指向数组的第1个元素。那么 p - q
的计算方式如下:
p - q = (&arr[4] - &arr[1]) = 4 - 1 = 3;
这表示从 q
指向的位置到 p
指向的位置之间有 3
个元素。因此,指针相减的结果是两个指针之间的元素个数,而不是它们的内存地址之差。
复杂结构体数组例子
为了展示更复杂的指针操作,我们定义一个包含两个成员的结构体,并创建一个结构体数组。