对C++中指针的天马行空后,出现一系列发现和问题

对C++中指针的天马行空后,出现一系列发现和问题,第1张

对C++中指针的天马行空后,出现一系列发现和问题

文章含有以下内容: 

---对野指针进行定地址(随机定)---

---使char指针的地址与int指针相同---

引言:

以下是来自刚开始学指针的一些神奇想法和另作者头大的问题:

在最开始接触指针的时候我创建的是int类型,一切都是那么平平无奇,根据教程中的*p++,*(p++),(*p)++来看,那么,我纯粹对int类中各指针p的地址++进行了一番探索:

#include
using namespace std;
int main(){
    int *p=NULL,*j=NULL,*i;
    int a=1;
    p=&a;
    cout<<"指针p原地址为:"< 

结果为:

指针p原地址为:0x61fe04
空指针j原地址为:0
野指针i原地址为:0x1e
指针p++:0x61fe08
空指针j++:0x4
野指针i++:0x22
指针p++,++:0x61fe0c
空指针j++,++:0x8
野指针i++,++:0x26

这里有了一个问题:空指针++后,性质上会变成野指针嘛?

知识匮乏:没有解决此问题           又引出以下现象:

通过对地址++使得原有地址的值在新地址也能解引用(可能是巧合,或者bug)
#include
using namespace std;
int main(){
    int *p;
    int *i;
    cout<<"p:"< 

结果为:

p:0x10
i:0xf31870
i++:0xf31874
*i++:0
i++,++:0xf31878
*i++,++:0

                                                                 

都是0? 值的地址这么简单就改变了嘛?

 emmm

技穷,这个问题我放弃了

敲着敲着又有了个新发现:在定义多个空指针,有值指针,再混搭野指针的时候:                                               野指针会听话起来!
#include
using namespace std;
int main(){
    int *m;
    int *k;
    int *w;
    int *n;
    int *p=NULL,*j=NULL;
    int a=1;
    p=&a;
    cout<<"野指针m原地址为:"< 

结果为:

野指针m原地址为:0x1e
野指针k原地址为:0x8
野指针w原地址为:0x401519
野指针n原地址为:0x8
指针p原地址为:0x61fdec
空指针j原地址为:0

有的野指针会:

1,很听话的排队(巧合嘛?)

2,地址重复

3,每次运行地址不变

以下又是派生的一个有趣的问题:

将char无值的指针累加减到int有值的指针地址那,会发生什么?

 介于指针混搭现象会导致个别指针听话的行为,以下是作者拼凑出来的,为了呈现效果!

#include
using namespace std;
int main(){
    int *n;
    int *j;
    char *m;
    int *p=NULL;
    int a=1;
    p=&a;
    cout<<"野指针n原地址为:"< 

不同类型的指针地址一样了,可是最后一行代码出现了问题:

野指针n原地址为:0xda1870
野指针j原地址为:0x1e
char野指针m原地址为:0x8
指针p原地址为:0x61fdfc
char野指针m现在的地址为:0x61fdfc
解m为:
解p为:1
                                         不报错!也没值?

这个结果让我很是惊讶!

到这里已经词穷,技穷了,却有了以下几个问题:

1,空指针++后性质上还是空指针嘛?

2,《通过对地址++使得原有地址的值在新地址也能解引用》中,为什么会出现两个0?

3,使char无值的指针累加减到int有值的指针的地址那,对两个指针进行解引用,出现相关问题

以上来自刚学C++刚学指针的吐槽(可能存在很多bug)

如果读者大大有解,还望指点12

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5116163.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存