请教一个int指针的有关问题
请问一个int指针的问题?C/C++ codeint * pnew int[2]int *qp+1std::coutpstd::endlstd::coutq
请问一个int指针的问题?
C/C++ codeint * p=new int[2]; int *q=p+1; std::cout<<p<<std::endl; std::cout<<q<<std::endl; int x=q-p; std::cout<<x<<std::endl;
打印结果:
00573e68
00573e6c
1
为什么p的值为00573e68,q的值为00573e6c,er相减的结果为1.
是不是int *的'-'运算符是重载的,指针相减的结果是:两个指针变量相减除size(type);
是不是这样呀?
[解决办法]可以这么理解的。因为指针加减运算的是实际类型的个数
[解决办法]因为这里是int型的指针,两个int型指针相减,
表示的是其间int变量的个数,而不是两个指针之间相差的字节数
[解决办法]指针做加减运算,都是表示对该类型指针做元素个数的偏移,而不是字节的偏移(char*是字节,因为他就一个字节长)
[解决办法]指针本身存放的是一个长整型的数,这个数表示该指针指向的变量的实际物理地址,指针前面加星号表示取指针指向的变量的值,指针本身或者指针和常数之间的运算都表示偏移元素的个数,如果你想要知道真正偏移了多少个字节数,就乘以相应类型的字节数了。其实你的那句int *q=p+1;可以拆分成两句:int *q;q=p+1;这样你就会很好理解了吧,你的那句把声明和赋值放在一起,分开后就很容易解释你的疑惑了。p,q都是int类型的,占4个字节数,p+1表示向后偏移一个元素,其实q指向的就是数组的第二个元素,所以实际地址是偏移了4个字节。
解释得够详细了吧!
[解决办法]两个指针变量相减除size(type),
*p指针的内容;
p表示指针地址
[解决办法]因为你值钱定义的是
q=p+1嘛~