2011-05-19 76 views
0

我想编写一个方法,它需要两个指向整数的指针并更改它们指向的值。喜欢的东西:C:切换指向整数的指针

int main() { 
    int a = 3; 
    int b = 1; 
    change(&a, &b); 
    return 0; 
} 

void change(int *a, int *b) { 
    int t = a; 
    *a = *b; 
    *b = *t; 
} 

我必须了解如何从b为以后节省点a副本,并给它一个问题。

回答

2

你不喜欢这样:

int temp = *a; // remember actual value "a" points to 
*a = *b; // copy value "b" points to onto value "a" points to (will overwrite that value, but we have a copy in "temp") 
*b = temp; // now copy value "a" originally pointed to onto value "b" points to 
2

change的代码应该是:

void change(int *a, int *b) { 
    int t = *a; 
    *a = *b; 
    *b = t; 
} 

注意,访问的价值,你总是有使用*X,所以首先t持有由a指向的值,依此类推。

1

*提领指针,这就像返回指向的变量。因此,将值存储到解除引用的指针中会导致将该值存储到指向的内存中。因此,只需简单地解除引用这两个指针并仅处理这些数字,就不需要更改指针本身。

void change(int *a, int *b) { 
    int t = *a; 
    *a = *b; 
    *b = t; 
} 

事实上,因为你已经使用的call-by-值的函数的自变量交换中“变”的指针内存地址会对里面主要的变量都没有影响。

0

void change(int *a, int *b) { 
    int t = a; 
    *a = *b; 
    *b = *t; 
} 

没有你注意到a的类型是int *t的类型是int,所以你不能只是分配给at