可以用指针加下标的形式取数组的值吗?测试代码如下C/C++ code#includeiostream.hvoid main(){struct num
可以用指针加下标的形式取数组的值吗?
测试代码如下
C/C++ code#include<iostream.h>void main(){ struct num { int x; int y; }; num test[10]; test[0].x=0; test[0].y=-1; test[1].x=1; test[1].y=2; test[2].x=3; test[2].y=4; num*pt=test; cout<<pt[0].x<<endl<<pt[1].x<<endl<<pt[2].x<<endl;}
照样能输出0 1 3
但是我又听人说 指针跟数组名是不一样的 这样使用会造成严重的问题
所以请路过大侠指点 这样写行得通吗?会有什么问题呢?
[解决办法]的确:指针跟数组名是不一样的
但是,它们如果是同一级别(维数相同),数组名是可以转化为指针的,至于能否正常访问,要看具体内存数据格式是否满足正常的数组格式。
[解决办法]完全可以,没有问题。
指针变量和数组名是有含义不同部分,但你这样用却是它们含义完全相同的部分。
[解决办法]可以,就类似于数组int a[10];int *p = a;然后你就可以p[0]代表a[0],p[1]代表a[1],p[2]代表a[2]等等。。。
[解决办法]VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
不要写连自己也预测不了结果的代码!