热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我不懂C++指针算法

如何解决《我不懂C++指针算法》经验,为你挑选了1个好方法。

我有以下程序,它定义了2个整数和一个指向整数的指针.

#include 

int main() {

    int bla=999;
    int a=42;
    int* pa=&a;

    printf("%d \n", *pa);
    printf("%d \n", pa);

    pa++;
    //*pa=666; //runs (no error), but the console is showing nothing at all

    printf("%d \n", *pa);
    printf("%d \n", pa);

    pa++;
    //*pa=666; //runs and changes the value of *pa to 666;

    printf("%d \n", *pa);
    printf("%d \n", pa);

}

输出是:

42

2686740

2686744

2686744 //这个值很奇怪,我想

999

2686748

地址对我来说很有意义,但第四个值很奇怪,因为它正是int的地址.有人可以解释一下这种行为吗?

当我评论*pa = 666(第一个外观)时,控制台什么也没显示,所以这里有一些错误,但编译器没有显示错误.也许这是因为我的系统上的int的大小,我有一个64位的Windows-os,所以也许int是64位而不是32?并且因为第二次增量后*pa值是999而不是第一次?

我相信,有很多C程序员可以解释发生了什么:)



1> Gopi..:
int* pa=&a;

pa是指向整数的指针,并*pa定义了访问权限.

一旦递增指针,指针指向某个内存(在p之后),这个内存未由您分配或您不知道,因此取消引用它会导致未定义的行为.

pa++;

*pa 是UB

编辑:

使用正确的格式说明符打印%p@haccks指出的指针值


推荐阅读
author-avatar
骨头少校_726
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有