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;
}
一个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;
}
R*R
3 楼
给男大学生的礼物。这年头什么热门?
O*e
4 楼
谢谢孟老指点。
n*s
5 楼
要想改变b的值的话要*t=*s
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 ;
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 ;
w*a
8 楼
$
c*p
9 楼
看你的文字叙述,是想把一个地址赋给另一个地址,那应该这样写:
int *copy(int **s, int **t){
*t = *s;
return *t;
}
但是这样写的话,用下面这段代码调用,后果很严重(有多严重自己试试):
int *c = copy(&&a, &&b); //这就和&b = &a; 一样严重
int *copy(int **s, int **t){
*t = *s;
return *t;
}
但是这样写的话,用下面这段代码调用,后果很严重(有多严重自己试试):
int *c = copy(&&a, &&b); //这就和&b = &a; 一样严重
m*n
14 楼
关键是看人家好喜欢什么,再好的东西,人家不喜欢,岂不白搭.
A*u
17 楼
考虑到lz能问出这种问题,所以举例用int a=1,b=2也是情有可原。
我觉得实际情况应该是a,b都是两个指针指向两个在heap上的对象,然后传&a,&b进去
不过copy这个函数名暗示了应该是把s的内容复制给t的内容,不应该直接指针赋值啊
我觉得实际情况应该是a,b都是两个指针指向两个在heap上的对象,然后传&a,&b进去
不过copy这个函数名暗示了应该是把s的内容复制给t的内容,不应该直接指针赋值啊
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 ;
就指向了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 ;
s*o
21 楼
bingo, 指针的指针
相关阅读
short sale 的房子还能讲价吗?你会留哪个太搔锯子?Prequalify, loan officer 要 查credit越发觉得自己是洁癖了94年很豪华的VS 2011的房子7月灌水排名新龟腚:带马甲一起算房子lot是类似梯形的有什么不吉利吗?送冰箱的人,需要给小费吗?谈谈买卖房子一直搞不懂翁帆为啥要嫁给杨振宁,现在懂了请问买房时候lender什么时候看h1b等身份证明啊请问房间里的这个是什么东西请教在洗衣房装SINK问一个略ws的问题:草地上野草不管塔的除了整个草坪都是野草之外有啥坏处吗?这个folding saw能用来干什么小孩每天坐车上学被车撞死的可能性要比淹死在自家POOL里大的多请人在外墙打个洞要多少钱怎么测试水池的pump是不是工作?莫名其妙收到480块钱房子卖家不同意close前赶走房客怎么办?