《C和指针》摘录(二)

数组

int b[10];
b是一个指针常量(值为第一个元素的地址,类型取决于数组元素的类型),而不是指针变量,不可被修改。
只有两种场合下,数组名不用指针常量来表示:

当数组名作为sizeof操作符的操作数:返回整个数组的长度,而不是指向数组的指针的长度
当数组名作为单目操作符&的操作数:取一个数组名的地址 = 指向数组的指针,而不是一个指向某个指针常量值的指针。
int a[10];
int *c;

c = &a[0];
//等价于:
c = a;

下标引用可以作用于任何的指针,而不仅仅是数组名:

int array[10], a;

for( a = 0; a < 10; a ++)
{
    array[a] = 0;
}

//与:

int array[10], *ap;

for( ap = array; ap < array + 10; ap ++)
{
    *ap = 0;
}

上例中,采用下标的方法,编译器在程序中插入指令:需要取得a的值,并把它与整型的长度(4)相乘,这个乘法需要一定时间、空间。
采用下标方法,需要把++中的1与整型的长度相乘,然后再与指针相加,但是这个乘法运算都是相同的两个数(1和4),所以这个乘法在编译时只执行一次。

因此,根据某个固定数目的增量在一个数组中移动时,使用指针变量比使用下标效率更高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值