鱼C论坛

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

[已解决]代码阅读问题

[复制链接]
发表于 2022-9-13 23:14:38 | 显示全部楼层 |阅读模式

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

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

x
如下 , 注释里是我的理解 , 但是和输出不一致 , 求教 , 不懂为什么错
#include<bits/stdc++.h>
using namespace std;

int a[6];
void change(int a){
    a++;
}
void change1(int & a){
    a++;
}
int main(){
    int c = 1;

    for (int i = 1; i <= 5; i++){
        a[i] = i * 3;
    }

    int * b = & a[1]; // b 指向 a[1], a[1] == 3
    change( * b); // change 没有影响
    cout << * b << endl; // 还是 3
    cout << a[1] << endl; // 还是 3
    * b++; // b 指向的值++ , 即 a[1]++ == 4
    cout << * b << endl; // 输出 4
    cout << a[1] << endl; // 输出 4
    change1( * b); // 把 b ++ 了 , a[1] == 5
    cout << * b << endl; // 5
    cout << a[1] << endl; // 5
    * b = c; // b 指向 c , 值为 1
    change(c); // 没用
    cout << * b << endl; // 1
    cout << c << endl; // 1
    change1(c); // 2
    cout << * b << endl; // 2
    cout << c << endl; // 2

    return 0;
}
最佳答案
2022-9-14 19:14:07
本帖最后由 jhq999 于 2022-9-14 19:16 编辑
柿子饼同学 发表于 2022-9-14 18:02
不知道为啥 , 33 行输出 1 , 求解


* b = c;//其实是a[2]=c=1 指针b的值一直等于&a[2]
所以33行输出的是a[2]的值,和c的改变没有任何关系
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-14 06:39:23 | 显示全部楼层
本帖最后由 jhq999 于 2022-9-14 06:44 编辑

* b++;//b=&a[2],先指针自增再解引用,应该写成(*b)++
所以不要闲麻烦,加括号能避免很多BUG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-14 13:41:49 | 显示全部楼层
本帖最后由 两手空空儿 于 2022-9-14 13:51 编辑
#include<bits/stdc++.h>
using namespace std;

int a[6];
void change(int a){
    a++;
}
void change1(int & a){
    a++;
}
int main(){
    int c = 1;

    for (int i = 1; i <= 5; i++){
        a[i] = i * 3;
    }

    int * b = & a[1]; // b 指向 a[1], a[1] == 3
    change( * b); // change 没有影响
    cout << * b << endl; // 还是 3
    cout << a[1] << endl; // 还是 3
    * b++; // b 指向的值++ , 即 a[1]++ == 4                       //++的优先级比*高,这里是 *(b++) 也就是b指向a[2],取了*,但是没有使用
    cout << * b << endl; // 输出 4                                        // 输出 6
    cout << a[1] << endl; // 输出 4                                        // 输出 3
    change1( * b); // 把 b ++ 了 , a[1] == 5
    cout << * b << endl; // 5
    cout << a[1] << endl; // 5
    * b = c; // b 指向 c , 值为 1
    change(c); // 没用
    cout << * b << endl; // 1
    cout << c << endl; // 1
    change1(c); // 2
    cout << * b << endl; // 2
    cout << c << endl; // 2

    return 0;
}

只学了C,还不会C++,没有上机试,不知道说的有没有问题,后面楼主自己再顺一下吧,

void change1(int & a){
    a++;
}
这个地方我看不懂, c的写法应该是 void change1( int *a) 这样吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-9-14 16:16:21 | 显示全部楼层
两手空空儿 发表于 2022-9-14 13:41
只学了C,还不会C++,没有上机试,不知道说的有没有问题,后面楼主自己再顺一下吧,

void change1(i ...

哦 , 这个是 c++ 里的 引用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-14 18:01:40 | 显示全部楼层
jhq999 发表于 2022-9-14 06:39
* b++;//b=&a[2],先指针自增再解引用,应该写成(*b)++
所以不要闲麻烦,加括号能避免很多BUG

谢谢 , 改了 , 但是 33 行的输出还是不对, 不知道为什么
#include<bits/stdc++.h>
using namespace std;

int a[6];
void change(int a){
    a++;
}
void change1(int & a){
    a++;
}
int main(){
    int c = 1;

    for (int i = 1; i <= 5; i++){
        a[i] = i * 3;
    }

    int * b = & a[1]; // b 指向 a[1], a[1] == 3
    change( * b); // change 没有影响
    cout << * b << endl; // 还是 3
    cout << a[1] << endl; // 还是 3
    * b++; // b 指向 a[2] == 6
    cout << * b << endl; // 输出 6
    cout << a[1] << endl; // 输出 3
    change1( * b); // 把 b ++ 了 , a[2] == 7
    cout << * b << endl; // 7
    cout << a[1] << endl; // 3
    * b = c; // b 指向 c , 值为 1
    change(c); // 没用
    cout << * b << endl; // 1
    cout << c << endl; // 1
    change1(c); // 2
    cout << * b << endl; // 2
    cout << c << endl; // 2

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

使用道具 举报

 楼主| 发表于 2022-9-14 18:02:14 | 显示全部楼层
两手空空儿 发表于 2022-9-14 13:41
只学了C,还不会C++,没有上机试,不知道说的有没有问题,后面楼主自己再顺一下吧,

void change1(i ...

不知道为啥 , 33 行输出 1 , 求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-14 19:14:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2022-9-14 19:16 编辑
柿子饼同学 发表于 2022-9-14 18:02
不知道为啥 , 33 行输出 1 , 求解


* b = c;//其实是a[2]=c=1 指针b的值一直等于&a[2]
所以33行输出的是a[2]的值,和c的改变没有任何关系
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-14 19:18:54 | 显示全部楼层
jhq999 发表于 2022-9-14 19:14
* b = c;//其实是a[2]=c=1 指针b的值一直等于&a[2]
所以33行输出的是a[2]的值,和c的改变没有任何关系

哦哦哦搞错了 , 那里有取值符号
也就是说把 b 指向的值改为 1 , 即 a[2] == 1
然后改变 c 跟 b 无关
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 16:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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