文章含有以下内容:
---对野指针进行定地址(随机定)---
---使char指针的地址与int指针相同---
引言:
以下是来自刚开始学指针的一些神奇想法和另作者头大的问题:
在最开始接触指针的时候我创建的是int类型,一切都是那么平平无奇,根据教程中的*p++,*(p++),(*p)++来看,那么,我纯粹对int类中各指针p的地址++进行了一番探索:
#includeusing 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)#includeusing namespace std; int main(){ int *p; int *i; cout<<"p:"<
结果为:
p:0x10 i:0xf31870 i++:0xf31874 *i++:0 i++,++:0xf31878 *i++,++:0
都是0? 值的地址这么简单就改变了嘛?
emmm
技穷,这个问题我放弃了
敲着敲着又有了个新发现:在定义多个空指针,有值指针,再混搭野指针的时候: 野指针会听话起来!#includeusing 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有值的指针地址那,会发生什么?介于指针混搭现象会导致个别指针听话的行为,以下是作者拼凑出来的,为了呈现效果!
#includeusing 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)