柿子饼同学 发表于 2022-9-13 23:14:38

代码阅读问题

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

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

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

    int * b = & a; // b 指向 a, a == 3
    change( * b); // change 没有影响
    cout << * b << endl; // 还是 3
    cout << a << endl; // 还是 3
    * b++; // b 指向的值++ , 即 a++ == 4
    cout << * b << endl; // 输出 4
    cout << a << endl; // 输出 4
    change1( * b); // 把 b ++ 了 , a == 5
    cout << * b << endl; // 5
    cout << a << 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;
}

jhq999 发表于 2022-9-14 06:39:23

本帖最后由 jhq999 于 2022-9-14 06:44 编辑

* b++;//b=&a,先指针自增再解引用,应该写成(*b)++
所以不要闲麻烦,加括号能避免很多BUG

两手空空儿 发表于 2022-9-14 13:41:49

本帖最后由 两手空空儿 于 2022-9-14 13:51 编辑

#include<bits/stdc++.h>
using namespace std;

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

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

    int * b = & a; // b 指向 a, a == 3
    change( * b); // change 没有影响
    cout << * b << endl; // 还是 3
    cout << a << endl; // 还是 3
    * b++; // b 指向的值++ , 即 a++ == 4                     //++的优先级比*高,这里是 *(b++) 也就是b指向a,取了*,但是没有使用
    cout << * b << endl; // 输出 4                                        // 输出 6
    cout << a << endl; // 输出 4                                        // 输出 3
    change1( * b); // 把 b ++ 了 , a == 5
    cout << * b << endl; // 5
    cout << a << 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) 这样吧

柿子饼同学 发表于 2022-9-14 16:16:21

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

void change1(i ...

哦 , 这个是 c++ 里的 引用

柿子饼同学 发表于 2022-9-14 18:01:40

jhq999 发表于 2022-9-14 06:39
* b++;//b=&a,先指针自增再解引用,应该写成(*b)++
所以不要闲麻烦,加括号能避免很多BUG

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

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

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

    int * b = & a; // b 指向 a, a == 3
    change( * b); // change 没有影响
    cout << * b << endl; // 还是 3
    cout << a << endl; // 还是 3
    * b++; // b 指向 a == 6
    cout << * b << endl; // 输出 6
    cout << a << endl; // 输出 3
    change1( * b); // 把 b ++ 了 , a == 7
    cout << * b << endl; // 7
    cout << a << 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;
}

柿子饼同学 发表于 2022-9-14 18:02:14

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

void change1(i ...

不知道为啥 , 33 行输出 1 , 求解

jhq999 发表于 2022-9-14 19:14:07

本帖最后由 jhq999 于 2022-9-14 19:16 编辑

柿子饼同学 发表于 2022-9-14 18:02
不知道为啥 , 33 行输出 1 , 求解

* b = c;//其实是a=c=1 指针b的值一直等于&a
所以33行输出的是a的值,和c的改变没有任何关系

柿子饼同学 发表于 2022-9-14 19:18:54

jhq999 发表于 2022-9-14 19:14
* b = c;//其实是a=c=1 指针b的值一直等于&a
所以33行输出的是a的值,和c的改变没有任何关系

哦哦哦搞错了 , 那里有取值符号
也就是说把 b 指向的值改为 1 , 即 a == 1
然后改变 c 跟 b 无关
页: [1]
查看完整版本: 代码阅读问题