1. 数组名不用指针常量表示的两种情况:
- 数组名作为sizeof的操作数:sizeof返回数组的长度,而不是指向数组的指针的长度。
- 数组名作为操作符&的操作数:取一个数组名的地址所产生的是一个指向数组的指针,而不是指向某个指针常量值的指针
2. 指针的效率:
首先声明(适用于接下来的所有函数):
#define SIZE 50;
int x[SIZE];
int y[SIZE];
int i;
int *p1, *p2;
示例1:函数的下标版本
void try1()
{
for(i = 0; i < SIZE; i++)
x[i] = y[i];
}
示例2:指针
void try2()
{
for(p1 = x, p2 = y; p1 - x < SIZE; ){
*p1++ = *p2++;
}
}
示例3:重新使用计数器
void try3()
{
for(i = 0, p1 = x, p2 = y; i < SIZE; i++){
*p1++ = *p2++;
}
}
示例4:寄存器指针变量
void try4()
{
register int *p1, *p2;
register int i;
for(i = 0, p1 = x, p2 = y; i < SIZE; i++){
*p1++ = *p2++;
}
}
示例5:消除计数器
void try5()
{
register int *p1, *p2;
for(p1 = x, p2 = y; p1 < &x[SIZE]){
*p1++ = *p2++;
}
}
结论:
- 当根据某个固定数目的增量在一个数组中移动时,使用指针变量将比使用下标产生效率跟高的代码,