指针能不能作为循环变量?

指针能不能作为循环变量?有这么一道笔试题,一个数组,一个指针,一个循环,循环变量不是我们常见的整数,而是一个指针。首先,指针就是变量,它可以像普通类型一样来计算,所以把它当作循环变量当然没有问题。剩下的就是要搞清楚,它是如何移动的。for (p = s + 1; p < s + 4; p++)  p的初值是s+1,s是数组首元素地址,加一就是第二个元素地址,于是指针 p 指向数组第二个元素,就是b。  printf在输出字符串的时候,后面的参数是个地址,就是从这个地址开始向后逐个输出,直到遇到�,于是,第一次循环结果就是bcd。接下来,是p++操作,p加一会加几个字节,主要取决于它指向的内存是什么类型。char *p说明它指向的是char类型的数据,char类型数据在内存中占一个字节,所以p+1也就加一个字节,p指向了字符c,输出cd。  一共循环三次,所以结果就一目了然了。bcd cd d  指针运算需要注意它的步长。#include int main(){ int num, *p = # char ch, *q = &ch; printf(p的值 %p, p); printf(p+1的值 %p, p + 1); printf(q的值 %p, q); printf(q+1的值 %p, q + 1); return 0;} 比如,同样是指针,int *和char *,它俩加一的结果就不一样,一个加四个字节,一个加一个字节。root@turbo:~# ./test p的值 0x7ffc8116daf4p+1的值 0x7ffc8116daf8q的值 0x7ffc8116daf3q+1的值 0x7ffc8116daf4root@turbo:~#  如果把它理解成指向下一个元素,我觉得可能更容易接受一些。所以在写代码的时候,不同类型的指针不要随便赋值,除非你知道你在干什么,否则,就会出现一些不可预知的错误。比如下面的代码:#include int main(){ int num[] = {1, 2, 3, 4, 5}; char *p = (char *)num; p++; printf(%d, *(int *)p); return 0;}   num是个整型数组,每个元素占4个字节。
但是指针p是字符型指针,对p做自增操作,每次只能移动一个字节。很显然,已经不是一个完整的整数。所以这样的赋值,尽可能避免。


起重机运行状态实时在线监测系统
带无线充电的充电宝推荐,无线充电宝平价推荐
三星note8截胡iphone8,是真的错了吗?
无人驾驶关键技术分析
E现场:Redmi的真旗舰K20到底有多真
指针能不能作为循环变量?
无线技术在2.4 GHz ISM频段运行的的共存方案
电源适配器设计难?这份高性价比、实用参考设计助你火力全开
聊聊PCB板的装配工艺
AMD Ryzen处理器正逐步完善:B2步进版本首曝
ups蓄电池维护方法
iPhone 8发布会:早在10年前,母上大人就答应给买iPhone 8了!
国产高性能32位M0内核MCU单片机DP32G003介绍
串联谐振电路曲线共振频率的计算定义案例摘要
研扬科技VPC-5620S提供工业和车载边缘解决方案
区块链可以解决非洲的哪些问题
潘建伟团队刷新世界纪录:首次实现18个量子比特纠缠
如何有效延长电热管的使用寿命?
无人驾驶汽车测试场地(国内国外对比分析)
恒大汽车正式发布恒驰车标 你觉得怎么样呢