0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

学益得智能硬件 来源:学益得智能硬件 2023-02-16 18:11 次阅读
指针能不能作为循环变量?495b1648-addd-11ed-bfe3-dac502259ad0.png有这么一道笔试题,一个数组,一个指针,一个循环,循环变量不是我们常见的整数,而是一个指针。首先,指针就是变量,它可以像普通类型一样来计算,所以把它当作循环变量当然没有问题。剩下的就是要搞清楚,它是如何移动的。
for(p=s+1;p < s + 4; p++)
p的初值是s+1,s是数组首元素地址,加一就是第二个元素地址,于是指针 p 指向数组第二个元素,就是B。499b4da8-addd-11ed-bfe3-dac502259ad0.png  printf在输出字符串的时候,后面的参数是个地址,就是从这个地址开始向后逐个输出,直到遇到�,于是,第一次循环结果就是BCD。接下来,是p++操作,p加一会加几个字节,主要取决于它指向的内存是什么类型。char *p说明它指向的是char类型的数据,char类型数据在内存中占一个字节,所以p+1也就加一个字节,p指向了字符C,输出CD。4a20453a-addd-11ed-bfe3-dac502259ad0.png  一共循环三次,所以结果就一目了然了。
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的值   0x7ffc8116daf4
p+1的值 0x7ffc8116daf8
q的值   0x7ffc8116daf3
q+1的值 0x7ffc8116daf4
root@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做自增操作,每次只能移动一个字节。很显然,已经不是一个完整的整数。所以这样的赋值,尽可能避免。



审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符串
    +关注

    关注

    1

    文章

    551

    浏览量

    20123
  • 指针
    +关注

    关注

    1

    文章

    473

    浏览量

    70361
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66767
  • 变量
    +关注

    关注

    0

    文章

    595

    浏览量

    28112

原文标题:指针作为循环变量

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言中结构体能不能相加

    C语言中,结构体能不能相加?
    的头像 发表于 12-19 17:04 679次阅读
    C语言中结构体<b class='flag-5'>能不能</b>相加

    AD7682/AD7689内部参考电压能不能作为其他电路的参考电压?

    AD7682/AD7689内部参考电压能不能作为其他电路的参考电压? 例如,能不能设定AD7682从REF pin输出2.5V内部参考电压,接到ADA4841的正极端作为level
    发表于 12-21 06:52

    共享变量能不能实现这种功能呢

    各位大神好,请问用labview能不能实现这样一种功能,在前面板中的按钮控制某一VI的运行,这一个VI的运行结果又返回到主VI,不知道用共享变量能不能实现。描述的不够清楚,勿怪,谢谢。
    发表于 12-30 09:52

    急求atmega128可定义变量类型,主要是看能不能定义32位的变量

    急求atmega128可定义变量类型,主要是看能不能定义32位的变量
    发表于 05-17 10:46

    labview中能不能记录循环的状态

    labview中能不能记录循环的状态,并在中途退出后再次打开恢复中间状态
    发表于 05-20 14:19

    请问AD7682内部参考电压能不能作为其他电路的参考电压?

    AD7682/AD7689内部参考电压能不能作为其他电路的参考电压?例如,能不能设定AD7682从REF pin输出2.5V内部参考电压,接到ADA4841的正极端作为level sh
    发表于 12-14 09:11

    电池能不能修复?

    电池能不能修复? 电池修复作为一个新生事物,许多人对它不了解,也有许多人对它一知半解。那么电池到底能不能修复呢?
    发表于 11-23 10:40 987次阅读

    光耦(TLP521-4)能不能转换电压?

    光耦(TLP521-4)能不能转换电压?
    发表于 05-31 11:15 4138次阅读

    新能源的车到底能不能买_新能源汽车的利与弊

     那么新能源汽车到底能不能买?内行人说出实情,后悔没有早知道
    的头像 发表于 07-30 09:59 3754次阅读

    大型辊压机轴磨损能不能现场维修?

    大型辊压机轴磨损能不能现场维修?
    发表于 06-23 15:35 1次下载

    功耗分析能不能再提前亿点点?

    ‍ ‍     原文标题:功耗分析能不能再提前亿点点? 文章出处:【微信公众号:新思科技】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 04-13 22:50 247次阅读

    下周五|功耗分析能不能再提前亿点点?

    ‍ ‍     原文标题:下周五|功耗分析能不能再提前亿点点? 文章出处:【微信公众号:新思科技】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 04-14 18:35 270次阅读

    悬空指针能不能访问?

    指针被释放后,是不是就变成了空指针?这是很多刚接触指针的同学存在的误区。
    的头像 发表于 08-17 17:11 639次阅读
    悬空<b class='flag-5'>指针</b><b class='flag-5'>能不能</b>访问?

    物联网流量卡到底能不能用?

    物联网流量卡到底能不能用?
    的头像 发表于 08-28 09:40 3465次阅读
    物联网流量卡到底<b class='flag-5'>能不能</b>用?

    拼接屏能不能触屏操作?

    拼接屏能不能直接触屏操作,小编回答可以的,实际上很多客户购买拼接屏时都会提出拼接屏能不能加触摸的功能?我们回复是可以的,那是一种怎样的原理呢? 拼接屏一般是用来大屏展示,用来播放文字、图像等内容
    的头像 发表于 09-11 14:36 1105次阅读