C++关于指针的一个小问题求解
如下代码,这个代码是我们老师给我们举的例子,我为了调试家了很多输出,后面的注释是英文的,:int main{
int y = { 5, 2, 9, 6};
int* p = y + 3;//p=&y=6
cout<<y<<' '<<y<<' '<<*p<<endl;
cout<<p<<endl;
//++*p;//p=&y y=7
//cout<<*p<<' '<<y<<endl;
++*(p-1);//p=&y??????? y=9+1=10; but *p != y=10?????????????????and the address of p does not change!
cout<<p<<endl;//actually the address of p does not change! it stillmeans p=&y;
cout<<"*p= "<<*p<<' '<<"y= "<<y<<' '<<"y= "<<y<<endl;
p++;//p=&y y=0
cout<<"*p= "<<*p<<' '<<"y= "<<y<<endl;
cout<<"#####################"<<endl;
cout<<p<<' '<<p<<' '<<p<<' '<<p<<' '<<p<<' '<<p<<endl;
p += 3;//
cout<<"y= "<<y<<"p= "<<p<<endl;
for (int i = 0; i < 10; i++)
cout << y << ' ';
cout << '\n'; //______5 2 1060 0 3 0 0 0 ?????????????______________________
}
这段代码我不懂的地方就是,++*(p-1);这句话,因为我之前只练习过++*p;他的意思是当前数值自+1,但是老师突然给了这行,我很不明白,而且我调试输出的时候,发现前后p指针指向的地址竟然没变(这里一头雾水{:5_99:} ),然后数组y的值竟然变成了10,但是此时*p的值竟然是指针p指向y =6.
1.我的理解是p-1为p指针的地址先减1,p=&y ,++*(p-1),然后再把y+1=9+1=10,但是此时p应该是依然只向&y的呀????为啥不变呢??
2.最不懂的是最后输出的时候,y竟然是3???
3.p既然是只向了y的地址,那么我的理解是pn=1,2,3,4....,不应该是等于数组y中的元素值吗,为啥这里全都是0呢?
希望大神能给我讲一讲,谢谢!!! #include <iostream>
int main()
{
int a = {1, 2, 3};
int *p = &a;
std::cout << p << std::endl;
++*(p);
std::cout << p << std::endl;
std::cout << a << std::endl;
std::cout << a << std::endl;
std::cout << a << std::endl;
return 0;
}
/*
000000C3A112F94C
000000C3A112F94C
1
3
3
请按任意键继续. . .
*/ #include <iostream>
int main()
{
int a = {1, 2, 3};
int *p = &a;
std::cout << p << std::endl;
++*(p - 1);
std::cout << p << std::endl;
std::cout << a << std::endl;
std::cout << a << std::endl;
std::cout << a << std::endl;
return 0;
}
/*
0000006A6177F73C
0000006A6177F73C
2
2
3
请按任意键继续. . .
*/ p指向a
*p就是a
++*p就是++a
++*(p - 1);
*(p - 1)是p[-1]
++*(p - 1)是++p[-1]
#include <iostream>
int main()
{
int a = {1, 2, 3};
int *p = &a;
std::cout << p << std::endl;
//++*(p - 1);
++p[-1];
std::cout << p << std::endl;
std::cout << a << std::endl;
std::cout << a << std::endl;
std::cout << a << std::endl;
return 0;
}
/*
000000C0294FFA1C
000000C0294FFA1C
2
2
3
请按任意键继续. . .
*/ ++*(p);
*(p)是*(p + 0)
*(p + 0)是p
++*(p)是++p
#include <iostream>
int main()
{
int a = {1, 2, 3};
int *p = &a;
std::cout << p << std::endl;
++p;
std::cout << p << std::endl;
std::cout << a << std::endl;
std::cout << a << std::endl;
std::cout << a << std::endl;
return 0;
}
/*
0000009DBFBFF99C
0000009DBFBFF99C
1
3
3
请按任意键继续. . .
*/ 本帖最后由 jackz007 于 2019-12-8 12:44 编辑
int y = , * p = y + 3 ;
p 指向 y,p - 1 自然指向 y,那么,语句:
++ * (p - 1) ;
的意思自然是
++ y;
所以,y 的值从 9 变成了 10,而 p 则依旧指向 y,这不是很正常吗?
页:
[1]