C 陷阱与缺陷 —— Chapter tree 语义陷阱之指针和数组

1. 指针和数组

指针可以指向各种数据类型的数据,通过指针可以对此类型结构的成员进行操作,如果一个指针指向一个数组,可以通过指针加减控制指向的数组位置,

数组名代表指向数组第一个元素的指针,可以采用 int a[20]; int *p = a; 的方法使得 p 指针指向 a 数组。

二维指针不推荐使用指针进行操作,下面的例子是一个正确可运行的例子:

int calendar[12][31];

int (*monthp)[31];   /* monthp 是一个指向具有 31 个子数组的二维数组指针*/

monthp = calendar;

对于以下清空 calendar 数组的代码:

int month;

for(month=0; month<12; month++){

        int day;

        for(day=0; day<31; day++)

                calendar[month][day] = 0; /*等效于 *(*(calendar + month ) + day) = 0;*/

}

可以通过以下代码替换:

for(monthp = calendar; monthp < &calendar[12]; monthp++){

        int *dayp;

        for(dayp = *monthp; dayp<&(*monthp)[31]; dayp++)

                *dayp = 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值