C语言和指针-回顾09-指针的运算

相减:

两个指针可以相减,相减的结果的类型是ptrdiff_t(这个是一个有符号整数类型)。

相减的结果:数组元素的长度为单位,而不是以字节为单位。

两个指针必须都指向同一个数组中的某个元素。

 1 typedef struct {
 2     int a;
 3     int b;
 4     int c;
 5     int d;
 6 } my_struct;
 7 
 8 my_struct my_arrary[2] = {
 9     {1, 2, 3, 4},
10     {10, 20, 30, 40}
11 };
12 
13 my_struct *my_pointer_1 = &my_arrary[0];
14 my_struct *my_pointer_2 = &my_arrary[1];
15 
16 printf("my_pointer_2 - my_pointer_1 = %d
",my_pointer_2 - my_pointer_1);
17 printf("my_pointer_1 - my_pointer_2 = %d
",my_pointer_1 - my_pointer_2);
18 
19 Output :
20 my_pointer_2 - my_pointer_1 = 1
21 my_pointer_1 - my_pointer_2 = -1

比较:< , <= , > , >=

可以比较两个指针,但前提条件是这两个指针都必须指向同一个数组的某个元素 或者 指向数组最后一个元素后面一个内存。

比如:

int array[3];

int *p1 = &array[0];

int *p2 = p1 + 3;

int *p3 = p1 - 1;

p3 < p2:非法

p2 > p1:合法

指针+/-整数:

 

*与++

1 char array[5] = {0, 1, 2, 3, 4};
2 char *pointer = &array[0];
3 
4 printf("*pointer++ : %d
", *pointer++);
5 printf("*pointer++ : %d
", *pointer++);

第4行的打印是0还是1呢?结果是0 。由于++的优先级高于*,所以很容易搞混结果。

解释:这个结果是分3步。

    1. ++操作符产生一个pointer的副本
    2. 然后++操作符增加pointer的值
    3. 在pointer的副本上执行间接访问操作

Output :

*pointer++ : 0
*pointer++ : 1

原文地址:https://www.cnblogs.com/wuyuntana/p/14967767.html