当我以这种方式修改交换功能时会发生什么?
What happens when I modify the swap function this way?
当我们这样修改交换函数时会发生什么?我知道它不起作用,但到底发生了什么?我不明白我到底做了什么?
#include <stdio.h>
void swap(int*, int*);
int main(){
int x=5,y=10;
swap(&x, &y);
printf("x:%d,y:%d\n",x,y);
return 0;
}
void swap(int *x, int *y){
int* temp;
temp=x;
x=y;
y=temp;
}
在函数中
void swap(int* x, int* y){
int* temp;
temp=x;
x=y;
y=temp;
}
您只需交换两个函数参数的指针值。
如果你想交换它们的值,你需要像
一样实现它
void swap(int* x, int* y){
int temp = *x; // retrive the value that x poitns to
*x = *y; // write the value y points to, to the memory location x points to
*y = temp; // write the value of tmp, to the memory location x points to
}
交换函数交换引用内存位置的值。
在函数中,它的两个参数交换了所传递参数值的副本。
由于该函数处理参数的副本,因此不会交换作为临时对象的原始参数(传递给 x 和 y 的指针)。
要交换指向 x 和 y 的指针的值,您必须在 main 中定义这样的指针,通过 x 和 y 的地址初始化它们,并通过指向指针的指针将它们传递给函数。
这是一个演示程序。
#include <stdio.h>
void swap( int **ppx, int **ppy )
{
int *tmp = *ppx;
*ppx = *ppy;
*ppy = tmp;
}
int main(void)
{
int x=5, y=10;
int *px = &x;
int *py = &y;
printf( "*px = %d, *py = %d\n", *px, *py );
swap( &px, &py );
printf( "*px = %d, *py = %d\n", *px, *py );
return 0;
}
它的输出是
*px = 5, *py = 10
*px = 10, *py = 5
另见我对这个问题的回答指针混淆:c 中的交换方法
void swap(int *x, int *y){
int* temp;
temp = x;
x = y;
y = temp;
}
swap()
这里有两个指向 int
的指针,但在内部只交换本地指针 x
和 y
的值——它们指向的对象的地址到。 - 表示在returns之前的swap()
末尾,x
指向y
已经指向的对象,y
指向[=16]的对象=] 已指向。
x
和 y
指向的对象对调用方没有影响。
如果你想交换x
和y
指向的对象的值,你需要这样定义swap()
:
void swap(int *x, int *y){
int temp;
temp = *x; // temp gets the int value of the int object x is pointing to.
*x = *y; // x gets the int value of the int object y is pointing to.
*y = temp; // y gets the int value of temp (formerly x).
}
示例程序(Online Example):
#include <stdio.h>
void swap(int *x, int *y){
int temp;
temp = *x; // temp gets the int value of the int object x is pointing to.
*x = *y; // x gets the int value y of the int object y is pointing to.
*y = temp; // y gets the int value of temp (formerly x).
}
int main (void)
{
int a = 1, b = 2;
printf("Before the swap() function:\n");
printf("a = %d b = %d\n\n",a,b);
swap(&a,&b);
printf("After the swap() function:\n");
printf("a = %d b = %d",a,b);
return 0;
}
输出:
Before the swap() function:
a = 1 b = 2
After the swap() function:
a = 2 b = 1
当我们这样修改交换函数时会发生什么?我知道它不起作用,但到底发生了什么?我不明白我到底做了什么?
#include <stdio.h>
void swap(int*, int*);
int main(){
int x=5,y=10;
swap(&x, &y);
printf("x:%d,y:%d\n",x,y);
return 0;
}
void swap(int *x, int *y){
int* temp;
temp=x;
x=y;
y=temp;
}
在函数中
void swap(int* x, int* y){
int* temp;
temp=x;
x=y;
y=temp;
}
您只需交换两个函数参数的指针值。
如果你想交换它们的值,你需要像
一样实现它void swap(int* x, int* y){
int temp = *x; // retrive the value that x poitns to
*x = *y; // write the value y points to, to the memory location x points to
*y = temp; // write the value of tmp, to the memory location x points to
}
交换函数交换引用内存位置的值。
在函数中,它的两个参数交换了所传递参数值的副本。
由于该函数处理参数的副本,因此不会交换作为临时对象的原始参数(传递给 x 和 y 的指针)。
要交换指向 x 和 y 的指针的值,您必须在 main 中定义这样的指针,通过 x 和 y 的地址初始化它们,并通过指向指针的指针将它们传递给函数。
这是一个演示程序。
#include <stdio.h>
void swap( int **ppx, int **ppy )
{
int *tmp = *ppx;
*ppx = *ppy;
*ppy = tmp;
}
int main(void)
{
int x=5, y=10;
int *px = &x;
int *py = &y;
printf( "*px = %d, *py = %d\n", *px, *py );
swap( &px, &py );
printf( "*px = %d, *py = %d\n", *px, *py );
return 0;
}
它的输出是
*px = 5, *py = 10
*px = 10, *py = 5
另见我对这个问题的回答指针混淆:c 中的交换方法
void swap(int *x, int *y){
int* temp;
temp = x;
x = y;
y = temp;
}
swap()
这里有两个指向 int
的指针,但在内部只交换本地指针 x
和 y
的值——它们指向的对象的地址到。 - 表示在returns之前的swap()
末尾,x
指向y
已经指向的对象,y
指向[=16]的对象=] 已指向。
x
和 y
指向的对象对调用方没有影响。
如果你想交换x
和y
指向的对象的值,你需要这样定义swap()
:
void swap(int *x, int *y){
int temp;
temp = *x; // temp gets the int value of the int object x is pointing to.
*x = *y; // x gets the int value of the int object y is pointing to.
*y = temp; // y gets the int value of temp (formerly x).
}
示例程序(Online Example):
#include <stdio.h>
void swap(int *x, int *y){
int temp;
temp = *x; // temp gets the int value of the int object x is pointing to.
*x = *y; // x gets the int value y of the int object y is pointing to.
*y = temp; // y gets the int value of temp (formerly x).
}
int main (void)
{
int a = 1, b = 2;
printf("Before the swap() function:\n");
printf("a = %d b = %d\n\n",a,b);
swap(&a,&b);
printf("After the swap() function:\n");
printf("a = %d b = %d",a,b);
return 0;
}
输出:
Before the swap() function:
a = 1 b = 2
After the swap() function:
a = 2 b = 1