代码阅读问题
如下 , 注释里是我的理解 , 但是和输出不一致 , 求教 , 不懂为什么错#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:44 编辑
* b++;//b=&a,先指针自增再解引用,应该写成(*b)++
所以不要闲麻烦,加括号能避免很多BUG 本帖最后由 两手空空儿 于 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 13:41
只学了C,还不会C++,没有上机试,不知道说的有没有问题,后面楼主自己再顺一下吧,
void change1(i ...
哦 , 这个是 c++ 里的 引用 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 13:41
只学了C,还不会C++,没有上机试,不知道说的有没有问题,后面楼主自己再顺一下吧,
void change1(i ...
不知道为啥 , 33 行输出 1 , 求解 本帖最后由 jhq999 于 2022-9-14 19:16 编辑
柿子饼同学 发表于 2022-9-14 18:02
不知道为啥 , 33 行输出 1 , 求解
* b = c;//其实是a=c=1 指针b的值一直等于&a
所以33行输出的是a的值,和c的改变没有任何关系 jhq999 发表于 2022-9-14 19:14
* b = c;//其实是a=c=1 指针b的值一直等于&a
所以33行输出的是a的值,和c的改变没有任何关系
哦哦哦搞错了 , 那里有取值符号
也就是说把 b 指向的值改为 1 , 即 a == 1
然后改变 c 跟 b 无关
页:
[1]