鱼C论坛

 找回密码
 立即注册
查看: 2056|回复: 7

C++关于指针的一个小问题求解

[复制链接]
发表于 2019-12-8 11:57:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如下代码,这个代码是我们老师给我们举的例子,我为了调试家了很多输出,后面的注释是英文的,:
 int main{
int y[10] = { 5, 2, 9, 6};
    int* p = y + 3;//p=&y[3]=6
    cout<<y[2]<<' '<<y[3]<<' '<<*p<<endl;
    cout<<p<<endl;
    //++*p;//p=&y[3] y[3]=7
    //cout<<*p<<' '<<y[3]<<endl;
    ++*(p-1);//p=&y[2]???????     y[2]=9+1=10;        but *p != y[2]=10?????????????????and the address of p does not change!
    cout<<p<<endl;//actually the address of p does not change! it still  means p=&y[3];
    cout<<"*p= "<<*p<<' '<<"y[2]= "<<y[2]<<' '<<"y[3]= "<<y[3]<<endl;
    p++;//p=&y[4] y[4]=0
    cout<<"*p= "<<*p<<' '<<"y[3]= "<<y[3]<<endl;
    cout<<"#####################"<<endl;
    cout<<p[0]<<' '<<p[1]<<' '<<p[2]<<' '<<p[3]<<' '<<p[4]<<' '<<p[5]<<endl;
    p[2] += 3;//
    cout<<"y[2]= "<<y[2]<<"p[2]= "<<p[2]<<endl;
    for (int i = 0; i < 10; i++)
        cout << y[i] << ' ';
    cout << '\n';                                 //______5 2 10  6  0 0 3 0 0 0 ?????????????______________________
}

这段代码我不懂的地方就是,
++*(p-1);
这句话,因为我之前只练习过++*p;他的意思是当前数值自+1,但是老师突然给了这行,我很不明白,而且我调试输出的时候,发现前后p指针指向的地址竟然没变(这里一头雾水 ),然后数组y[2]的值竟然变成了10,但是此时*p的值竟然是指针p指向y        [3]=6.
1.我的理解是p-1为p指针的地址先减1,p=&y[2] ,++*(p-1),然后再把y[2]+1=9+1=10,但是此时p应该是依然只向&y[2]的呀????为啥不变呢??
2.最不懂的是最后输出的时候,y[6]竟然是3???
3.p既然是只向了y的地址,那么我的理解是p[n]n=1,2,3,4....,不应该是等于数组y中的元素值吗,为啥这里全都是0呢?


希望大神能给我讲一讲,谢谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-8 12:30:56 | 显示全部楼层
#include <iostream>

int main()
{
        int a[3] = {1, 2, 3};
        int *p = &a[1];

        std::cout << p << std::endl;
        ++*(p);
        std::cout << p << std::endl;
        std::cout << a[0] << std::endl;
        std::cout << a[1] << std::endl;
        std::cout << a[2] << std::endl;
        return 0;
}

/*
000000C3A112F94C
000000C3A112F94C
1
3
3
请按任意键继续. . .
*/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 12:32:18 | 显示全部楼层
#include <iostream>

int main()
{
        int a[3] = {1, 2, 3};
        int *p = &a[1];

        std::cout << p << std::endl;
        ++*(p - 1);
        std::cout << p << std::endl;
        std::cout << a[0] << std::endl;
        std::cout << a[1] << std::endl;
        std::cout << a[2] << std::endl;
        return 0;
}

/*
0000006A6177F73C
0000006A6177F73C
2
2
3
请按任意键继续. . .
*/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 12:33:54 | 显示全部楼层
p指向a[1]
*p就是a[1]

++*p就是++a[1]

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 12:35:38 | 显示全部楼层
++*(p - 1);

*(p - 1)是p[-1]
++*(p - 1)是++p[-1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 12:36:11 | 显示全部楼层
#include <iostream>

int main()
{
        int a[3] = {1, 2, 3};
        int *p = &a[1];

        std::cout << p << std::endl;
        //++*(p - 1);
        ++p[-1];
        std::cout << p << std::endl;
        std::cout << a[0] << std::endl;
        std::cout << a[1] << std::endl;
        std::cout << a[2] << std::endl;
        return 0;
}

/*
000000C0294FFA1C
000000C0294FFA1C
2
2
3
请按任意键继续. . .
*/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 12:38:43 | 显示全部楼层
++*(p);

*(p)是*(p + 0)
*(p + 0)是p[0]
++*(p)是++p[0]
#include <iostream>

int main()
{
        int a[3] = {1, 2, 3};
        int *p = &a[1];

        std::cout << p << std::endl;
        ++p[0];
        std::cout << p << std::endl;
        std::cout << a[0] << std::endl;
        std::cout << a[1] << std::endl;
        std::cout << a[2] << std::endl;
        return 0;
}

/*
0000009DBFBFF99C
0000009DBFBFF99C
1
3
3
请按任意键继续. . .
*/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 12:42:36 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2019-12-8 12:44 编辑
        int y[10] = [5 , 2 , 9 , 6] , * p = y + 3 ; 
        p 指向 y[3],p - 1 自然指向 y[2],那么,语句:
        ++ * (p - 1) ;
        的意思自然是
        ++ y[2]  ;
        所以,y[2] 的值从 9 变成了 10,而 p 则依旧指向 y[3],这不是很正常吗?
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 01:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表