avatar
求推荐# Living
d*r
1
瑞神应该向色拉皮学习,关键是东西到了,生意成了,其他误解也好,
miscommunication也好通通拉到,这样才有下次合作的机会。
avatar
h*m
2
想写一个函数,传进去两个地址,把第一个的地址赋给第二个,这样两个指针都指向同
一个address:
int *copy(int *s, int *t){
t = s;
return t;
}
可是我下面的测试,输出1,2,1, 为啥b的值没变啊?但是返回的值c是1,不是说明我的
copy函数里,t指向的地址已经变成s指向的地址了么?
int main(int argc, char **argv) {
int a =1, b =2 ;
int *c = copy(&a, &b);
printf("%d, %d, %d", a, b, *c);
return 0;
}
avatar
R*R
3
给男大学生的礼物。这年头什么热门?
avatar
O*e
4
谢谢孟老指点。
avatar
n*s
5
要想改变b的值的话要*t=*s
avatar
W*l
6
iphone, ipad 4, ipad mini, wii u, nexus 4

【在 R**R 的大作中提到】
: 给男大学生的礼物。这年头什么热门?
avatar
p*g
7
each function has its own stack.
When you call copy(), it creates a new frame and initializes s to &a, t to &
b. So s and &a points to the same memory location, but they are different.
After you assign s to t, both of them hold the memory location of a. When
you return, you are just returning the memory address of a, and both s and t
are deallocated.
c gets this pointer, and that's why it prints out 1.

【在 h********m 的大作中提到】
: 想写一个函数,传进去两个地址,把第一个的地址赋给第二个,这样两个指针都指向同
: 一个address:
: int *copy(int *s, int *t){
: t = s;
: return t;
: }
: 可是我下面的测试,输出1,2,1, 为啥b的值没变啊?但是返回的值c是1,不是说明我的
: copy函数里,t指向的地址已经变成s指向的地址了么?
: int main(int argc, char **argv) {
: int a =1, b =2 ;

avatar
w*a
8
$
avatar
c*p
9
看你的文字叙述,是想把一个地址赋给另一个地址,那应该这样写:
int *copy(int **s, int **t){
*t = *s;
return *t;
}
但是这样写的话,用下面这段代码调用,后果很严重(有多严重自己试试):
int *c = copy(&&a, &&b); //这就和&b = &a; 一样严重
avatar
w*t
10
保时捷旧车一辆、加2000刀,然后圣诞节期间可以不回家。

【在 R**R 的大作中提到】
: 给男大学生的礼物。这年头什么热门?
avatar
r*e
11
&a is a rvalue. I don't think u can apply & operator to a rvalue
so &&a won't compile I guess

【在 c****p 的大作中提到】
: 看你的文字叙述,是想把一个地址赋给另一个地址,那应该这样写:
: int *copy(int **s, int **t){
: *t = *s;
: return *t;
: }
: 但是这样写的话,用下面这段代码调用,后果很严重(有多严重自己试试):
: int *c = copy(&&a, &&b); //这就和&b = &a; 一样严重

avatar
w*t
12
突然发现,单爷一出,两大板斧,立即现身。

【在 R**R 的大作中提到】
: 给男大学生的礼物。这年头什么热门?
avatar
c*p
13
所以我说后果很严重……

【在 r*******e 的大作中提到】
: &a is a rvalue. I don't think u can apply & operator to a rvalue
: so &&a won't compile I guess

avatar
m*n
14
关键是看人家好喜欢什么,再好的东西,人家不喜欢,岂不白搭.
avatar
p*m
15
t是&b的一个copy,而不是&b本身

【在 h********m 的大作中提到】
: 想写一个函数,传进去两个地址,把第一个的地址赋给第二个,这样两个指针都指向同
: 一个address:
: int *copy(int *s, int *t){
: t = s;
: return t;
: }
: 可是我下面的测试,输出1,2,1, 为啥b的值没变啊?但是返回的值c是1,不是说明我的
: copy函数里,t指向的地址已经变成s指向的地址了么?
: int main(int argc, char **argv) {
: int a =1, b =2 ;

avatar
W*F
16
b地址的值是值传递,
b地址本身没改变

【在 h********m 的大作中提到】
: 想写一个函数,传进去两个地址,把第一个的地址赋给第二个,这样两个指针都指向同
: 一个address:
: int *copy(int *s, int *t){
: t = s;
: return t;
: }
: 可是我下面的测试,输出1,2,1, 为啥b的值没变啊?但是返回的值c是1,不是说明我的
: copy函数里,t指向的地址已经变成s指向的地址了么?
: int main(int argc, char **argv) {
: int a =1, b =2 ;

avatar
A*u
17
考虑到lz能问出这种问题,所以举例用int a=1,b=2也是情有可原。
我觉得实际情况应该是a,b都是两个指针指向两个在heap上的对象,然后传&a,&b进去
不过copy这个函数名暗示了应该是把s的内容复制给t的内容,不应该直接指针赋值啊
avatar
h*0
18
貌似楼主没分清引用和指针的区别。。。 你一开始传的是引用,然后函数里面的指针
就指向了a,b。 但是你函数中只是改变了指针的指向,并且这两个指针还是函数的局
部变量。 所以a,b值的本身就没有改变。 指针只是一个存了目标地址的变量, 要把
这个概念搞清楚

【在 h********m 的大作中提到】
: 想写一个函数,传进去两个地址,把第一个的地址赋给第二个,这样两个指针都指向同
: 一个address:
: int *copy(int *s, int *t){
: t = s;
: return t;
: }
: 可是我下面的测试,输出1,2,1, 为啥b的值没变啊?但是返回的值c是1,不是说明我的
: copy函数里,t指向的地址已经变成s指向的地址了么?
: int main(int argc, char **argv) {
: int a =1, b =2 ;

avatar
d*e
19
楼主传的地址没错。错的是指针是copy过去的。改变的是copy后的局部变量。

【在 h*******0 的大作中提到】
: 貌似楼主没分清引用和指针的区别。。。 你一开始传的是引用,然后函数里面的指针
: 就指向了a,b。 但是你函数中只是改变了指针的指向,并且这两个指针还是函数的局
: 部变量。 所以a,b值的本身就没有改变。 指针只是一个存了目标地址的变量, 要把
: 这个概念搞清楚

avatar
h*d
20
正解

★ 发自iPhone App: ChineseWeb 7.8

【在 d******e 的大作中提到】
: 楼主传的地址没错。错的是指针是copy过去的。改变的是copy后的局部变量。
avatar
s*o
21
bingo, 指针的指针
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。