关于C++指针的研究
来源:互联网 发布:linux修复 内核升级 编辑:程序博客网 时间:2024/06/05 16:46
这2天,为了应付实习公司的面试,要求我在windows下写一个俄罗斯方块出来
以前用j2me写过一个俄罗斯方块,基本算法和数据结构都有一定的考虑了,可动手开写的时候C++的指针很是把我郁闷了一阵,特别是关于数组的指针和指针数组等,一多了就搅在一起搞不清楚,昨天花了一下午基本上算是搞懂了,在这里做个总结,也算是对的起自己一下午的劳动
int one[2] ={2,3}
cout<<one<<&one<<*one<<endl
得到的结果是0x0013FF34 0x0013FF34 3,这里 b 和 &b的值是一样的.
但是如果用一个指针来指向它,如下
int * pone = one;
cout<<pone<<" "<<&pone<<" "<<*pone<<" "<<endl;
得到的结果是0x0013FF34 0x0013FF3C 3, pone和&pone就不一样了,如我们所期待的一样.
这里就可以得到一个结论,打印数组名得到的是数组的起始地址,而打印&数组名得到一样的结果.但是这不能理解成 one = &one.我们可以用如下方式证明:
pone = one ;//success
pone = &one; //failed,因为&one 实际是一个 int (*)[2]指针,它不能转换成int *.
pone = *&one;//success
这样,我们可以知道&one 是一个int (*)[2]指针,*&one则是一个int* 指针,**&one则会得到3,因此,我们还可以使用*&one[0] 来访问one[0],*&one来访问one[1];
现在,我们来定义一个int (*)[2] 的指针,如下:
int (*ppone)[2] = &one; //success
cout<<ppone<<" "<<&ppone<<" "<<*ppone<<" "<<**ppone;
输出如下:0x0013FF34 0x0013FF30 0x0013FF34 3,这里我们可以看到,ppone 与 &ppone 也是不相同的, 但ppone 与 *ppone相同,这是为什么呢?我猜想可能是因为ppone = &one,而*ppone = *&one = one,而前面我们已经看到one 和 &one 的输出是一样的,因此这里ppone 和 *ppone也得到了一样的输出,但是要注意它们2个一个是int (*)[2],一个是int *,是不一样的.
最后我们看一下
cout<<&ppone[0]<<&ppone[1];
输出为 0x0013FF34 0x0013FF3C,这是因为ppone是一个int (*)[2],因为它每次加1都要跨越2个int的长度.
ok,休息一下,下一篇准备接着总结多维数组.
- 关于C中指针的运算的研究
- 关于C++指针的研究
- 关于C的指针
- <C语言>关于函数返回值是指针,取不到值的问题研究
- 关于C/C++的指针
- 关于 指针 ------------------C的精髓
- 关于c的各种指针
- 关于C的指针问题
- 关于C语言的指针
- C 关于指针的疑惑
- 关于C指针的记录
- 关于C语言的指针
- C++/C 关于指针的基本用法
- 关于各种字符数组及指针的小研究
- 关于类成员函数指针的再研究
- 对C/C++函数中指针与数组的研究.
- 指针的指针问题研究
- 关于C的二级指针的问题
- spring aop的另外一种实现
- ajax in action——javascript面向对象编程(上)
- 取得远程文件并保存到本地
- Spring aop实现事务加锁
- Learn Linux
- 关于C++指针的研究
- Struts处方:Hibernate与Struts
- Spring AOP实现权限的管理
- 博客文章该使用什么样的版权呢?
- Oracle函数列表速查
- 探讨throw、throws 、try/catch 作用区别
- jdbc操作关系数据库(oracle)
- Comment
- DataReader的使用总结