由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教一个入门级的C的指针问题
相关主题
C的argc问题你们看过programming pearls (2nd edition English) or 正在看的同学们
leetcode上一题,求正解为什么我这段简单的程序segment fault
一道C语言题bloomberg assessment的机经,c语言的(20道题)
one c++ questionC++ online Test 又一题
c++ 程序一问C++ 一题
问一个c++ 函数指针的问题这题哪错了?
面试问了个“master c++”的这个问题,答不出来,直接给枪毙了 (转载)这个看着很白痴的问题有更好的解法吗?
[合集] 问个C的基本问题帮看看这段code
相关话题的讨论汇总
话题: int话题: 指针话题: copy话题: 地址话题: 指向
进入JobHunting版参与讨论
1 (共1页)
h********m
发帖数: 116
1
想写一个函数,传进去两个地址,把第一个的地址赋给第二个,这样两个指针都指向同
一个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;
}
n*****s
发帖数: 6495
2
要想改变b的值的话要*t=*s
p********g
发帖数: 61
3
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 ;

c****p
发帖数: 6474
4
看你的文字叙述,是想把一个地址赋给另一个地址,那应该这样写:
int *copy(int **s, int **t){
*t = *s;
return *t;
}
但是这样写的话,用下面这段代码调用,后果很严重(有多严重自己试试):
int *c = copy(&&a, &&b); //这就和&b = &a; 一样严重
r*******e
发帖数: 7583
5
&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; 一样严重

c****p
发帖数: 6474
6
所以我说后果很严重……

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

p******m
发帖数: 544
7
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 ;

W*F
发帖数: 3941
8
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 ;

A******u
发帖数: 30
9
考虑到lz能问出这种问题,所以举例用int a=1,b=2也是情有可原。
我觉得实际情况应该是a,b都是两个指针指向两个在heap上的对象,然后传&a,&b进去
不过copy这个函数名暗示了应该是把s的内容复制给t的内容,不应该直接指针赋值啊
h*******0
发帖数: 270
10
貌似楼主没分清引用和指针的区别。。。 你一开始传的是引用,然后函数里面的指针
就指向了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 ;

d******e
发帖数: 2265
11
楼主传的地址没错。错的是指针是copy过去的。改变的是copy后的局部变量。

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

h**d
发帖数: 630
12
正解

★ 发自iPhone App: ChineseWeb 7.8

【在 d******e 的大作中提到】
: 楼主传的地址没错。错的是指针是copy过去的。改变的是copy后的局部变量。
s******o
发帖数: 78
13
bingo, 指针的指针
1 (共1页)
进入JobHunting版参与讨论
相关主题
帮看看这段codec++ 程序一问
问一道kth smallest element的题目问一个c++ 函数指针的问题
写了一个find kth number in 2 sorted arrays的code 请大牛看面试问了个“master c++”的这个问题,答不出来,直接给枪毙了 (转载)
一题[合集] 问个C的基本问题
C的argc问题你们看过programming pearls (2nd edition English) or 正在看的同学们
leetcode上一题,求正解为什么我这段简单的程序segment fault
一道C语言题bloomberg assessment的机经,c语言的(20道题)
one c++ questionC++ online Test 又一题
相关话题的讨论汇总
话题: int话题: 指针话题: copy话题: 地址话题: 指向