【C语言】学习笔记 第12章 指针和数组 12.1 指针的算术运算
【C语言】学习笔记
文章目录
- 【C语言】学习笔记
- 第12章 指针和数组
- 12.1 指针的算术运算
- 12.1.1 指针加上整数
- 12.1.2 指针减去整数
- 12.1.3 两个指针相减
- 12.1.4 指针比较
- 12.1.5 指向复合字面量的指针
第12章 指针和数组
当指针指向数组元素时,C 语言允许对指针进行算术运算(加法和减法), 通过这种运算我们可以用指针代替数组下标对数组进行处理。
12.1 指针的算术运算
之前我们已经看到过,指针可以指向数组元素:
int a[10], *p;
p = &a[0]; // 使 p 指向 a[0]
现在可以通过 p 访问 a[0]。
*p = 5; // 把值 5 存入 a[0]中
把指针 p 指向数组 a 的元素其实并不是特别令人激动。但是,通过在 p 上执行指针算术运算(或 者地址算术运算)可以访问数组 a 的其他所有元素。C 语言支持 3 种(而且只有 3 种)格式的 指针算术运算:
- 指针加上整数
- 指针减去整数
- 两个指针相减
12.1.1 指针加上整数
声明:
int a[10], *p, *q, i;
指针 p 加上整数 j 产生指向特定元素的指针,这个特定元素是 p 原先指向的元素后的 j 个 位置。更确切地说, 如果 p
指向数组元素 a[i]
,那么 p + j
指向 a[i + j]
(当然,前提 是 a[i + j]
必须存在)
12.1.2 指针减去整数
如果 p 指向数组元素 a[i],那么 p - j 指向 a[i - j]。例如:
12.1.3 两个指针相减
当两个指针相减时,结果为指针之间的距离(用数组元素的个数来度量)。因此,如果 p 指向 a[i]且 q 指向 a[j],那么 p - q 就等于 i - j。例如:
【注意】在一个不指向任何数组元素的指针上执行算术运算会导致未定义的行为。此外,只 有在两个指针指向同一个数组时,把它们相减才有意义。
12.1.4 指针比较
定义:
p = &a[5];
q = &a[1];
可以用关系运算符(<、<=、>和>=)和判等运算符(==和!=)进行指针比较。只有在两个 指针指向同一数组时,用关系运算符进行的指针比较才有意义。比较的结果依赖于数组中两个 元素的相对位置。例如,在上面的赋值后 p <= q
的值是 0【假】,而 p >= q
的值是 1【真】。
12.1.5 指向复合字面量的指针
复合字 面量是 C99 的一个特性,可以用于创建没有名称的数组。
指针指向由复合字面量创建的数组中的某个元素是合法的。
int *p = (int []){
3, 0, 3, 4, 1};
p 指向一个 5 元素数组的第一个元素,这个数组包括 5 个整数:3、0、3、4 和 1。使用复合字 面量可以减少一些麻烦,我们不再需要先声明一个数组变量,然后用指针 p 指向数组的第一个 元素:
上面的写法等价于下面这样:
int a[] = {
3, 0, 3, 4, 1};
int *p = &a[0];
还没有评论,来说两句吧...