7. 指针的索引运算
在 C 语言中,可以用数组中数据元素类型的指针来指向数组的起始地址,也可以指向任何一个数据元素的地址。那指针能否向数组一样使用索引运算符([])来进行索引运算呢,如果能这样用那真是太方便了。答案是可以这样做。我们来看 指针的索引运算 的语法
语法
指针[整数表达式]
说明
- 指针的索引运算 的规则和一维数组索引运算的规则完全相同。
- 在语法中,指针 p 的整数表达式索引 n 组成的表达式
p[n]等同于*(p+n)。 - 指针的索引运算 返回的是指针指向的位置起的第 n 个数据元素的引用。
示例
// filename: pointer_index.c
#include <stdio.h>
int main(int argc, char *argv[]) {
int scores[10] = {10, 20, 30, 40};
int *p = scores; // 用指针指向数组的起始位置
printf("---访问数组中第一个数据元素---\n");
printf("scores[0]: %d\n", scores[0]);
printf("p[0]: %d\n", p[0]);
printf("*p: %d\n", *p);
printf("---访问数组中第三个数据元素---\n");
printf("scores[2]: %d\n", scores[2]);
printf("p[2]: %d\n", p[2]);
printf("*(p+2): %d\n", *(p+2));
return 0;
}
运行结果如下
weimingze@mzstudio:~$ gcc -o pointer_index pointer_index.c
weimingze@mzstudio:~$ ./pointer_index
---访问数组中第一个数据元素---
scores[0]: 10
p[0]: 10
*p: 10
---访问数组中第三个数据元素---
scores[2]: 30
p[2]: 30
*(p+2): 30
从上面的示例的运行结果可以看出。指针也可以象数组一样使用索引表达式运算。并且规则完全相同。
数组索引和指针索引的区别:
- 数组的名称是常量,它的类型依然数组。只是数组名表达式的返回值是指针。
- 指针变量,它的类型是指针,指针可以随时改变指向的位置。
- sizeof 运算符对数组求长度得到的是数组占用内存的字节数。
- sizeof 运算符对指针求长度得到的是指针的长度( 4 或 8 字节)。
实验:
- 练习使用指针的索引运算来操作数组中的数据元素。