跳转至

Pointers and Arrays

12.1 指针的算术运算

//声明
int a[10], *p;

p = &a[0]

//访问并存值
*p = 5;

C语言支持3种格式的指针算术运算: - 指针加上整数; - 指针减去整数; - 两个指针相减。

int a[10], *p, *q, i;

12.1.1 指针加上整数

改变指针指向位置

12.1.2 指针减去整数

p = &a[i]; 
//p - j = a [i - j];

12.1.3 两个指针相减

两个指针相减时,结果为指针之间的距离(用数组元素的个数来度量)。因此,如果p 指向a[i]q 指向a[j] ,那么p-q 就等于i - j

p = &a[5];
q = &a[1];

12.1.4 指针比较

<<=>>=,==!=

只有指针指向同一数组时,比较才有意义。

比较的结果依赖于数组元素位置。

p = &a[5];
q = &a[1];
//p <= q -> 0
//p >= q -> 1

12.1.5 指向复合常量的指针

看原文待复习。。

12.2 指针用于数组处理

指针变量可以自增来访问数组元素。

#define N 10
···
int a[N], sum, *p;
···
sum = 0;
for(p = &a[0]; p < &a[N]; p++)
    sum += *p;

*运算符和++运算符的组合

暂时跳过

12.3 用数组名作为指针

**用数组的名字作为指向数组第一个元素的指针 **

//声明a
int a[10]

//a[0] = 7
*a = 7; 

//a[1] = 12
*(a + 1) = 12;