丶不离不弃 发表于 2019-12-8 11:57:05

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呢?


希望大神能给我讲一讲,谢谢!!!

人造人 发表于 2019-12-8 12:30:56

#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
请按任意键继续. . .
*/

人造人 发表于 2019-12-8 12:32:18

#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
请按任意键继续. . .
*/

人造人 发表于 2019-12-8 12:33:54

p指向a
*p就是a

++*p就是++a

人造人 发表于 2019-12-8 12:35:38

++*(p - 1);

*(p - 1)是p[-1]
++*(p - 1)是++p[-1]

人造人 发表于 2019-12-8 12:36:11

#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
请按任意键继续. . .
*/

人造人 发表于 2019-12-8 12:38:43

++*(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:42:36

本帖最后由 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]
查看完整版本: C++关于指针的一个小问题求解