数组下标法
#include <stdio.h>
int main() {
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
指针法
#include <stdio.h>
int main() {
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *ptr = arr;
for (int i = 0; i < 10; i++) {
printf("%d ", *(ptr + i));
}
printf("\n");
return 0;
}
差异
- 可读性:
- 数组下标法:直观易懂,通过数组名和下标直接访问元素,符合人们对数组的常规认知,如
arr[i]
,一眼就能看出是访问数组arr
的第i
个元素。
- 指针法:相对复杂,使用指针的偏移来访问元素,如
*(ptr + i)
,需要对指针运算有较好的理解才能清晰看出是在访问数组元素。
- 执行效率:
- 在现代优化编译器下,两者的执行效率几乎相同。编译器通常会对这两种方式进行优化,将数组下标访问转换为类似指针的偏移访问。不过在早期编译器中,数组下标法可能会稍慢,因为下标法需要进行越界检查(虽然C语言本身不强制,但一些安全库可能会做),而指针法直接基于地址偏移。
- 灵活性:
- 数组下标法:只能按照数组的固定顺序访问元素,灵活性较差。
- 指针法:指针可以灵活地进行移动和运算,比如通过改变指针的指向,实现对数组部分元素的跳跃式访问,或者对多个数组进行关联访问等操作,灵活性更高。