C 简单的交换功能…为什么';这不是交换吗?
我是C语言的新手,仍然试图掌握指针的概念。我知道如何编写一个可以工作的交换函数……我更关心的是为什么这个函数不能工作C 简单的交换功能…为什么';这不是交换吗?,c,pointers,C,Pointers,我是C语言的新手,仍然试图掌握指针的概念。我知道如何编写一个可以工作的交换函数……我更关心的是为什么这个函数不能工作 void swap(int* a, int* b) { int* temp = a; a = b; b = temp; } int main() { int x = 5, y = 10; int *a = &x, *b = &y; swap(a, b); printf(“%d %d\n”), *a, *b); } 指针按值传递。这意味着从功能返回
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
指针按值传递。这意味着从功能返回时,a&b仍然是a和b
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
试试这样的
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
正确的方法是:
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
void swap(int* a, int* b)
{
int temp = *a; // Temp is set to the value stored at a (5)
*a = *b; // value stored at a is changed to the value stored at b (10)
*b = temp; // value stored in address b is changed to 5.
}
C是一种传递值语言。您的
swap
例程不会取消对传递给它的指针的引用,因此从main
的角度来看,没有发生任何事情。您在swap函数中缺少*
s。尝试:
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
这样,您就不只是交换指针,而是交换指针指向的
int
s。它确实交换。它在swap
函数内交换本地指针a
和b
。它可以很好地交换它们,这是它应该做的
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
如果要交换这些指针指向的值,则应相应地重新实现
交换
函数,即使其交换指向的值,而不是指针。您的交换()函数确实有效,以某种方式-它交换swap()
本地变量a
和b
的值。不幸的是,它们与main()
中的a
和b
不同,因此您实际上看不到交换它们的任何效果。zildjohn1的答案是最简单、最清晰的方法。但是,如果坚持交换指针,则必须将指针传递给指针,因为指针本身是按值传递的。在考虑指针时,需要明确一些抽象概念
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
内存中的对象。这可以是任何类型(和大小)。例如,整数对象将占用内存中的4个字节(在32位计算机上)。指针对象将占用内存中的4个字节(在32位计算机上)。显而易见,integer对象包含整数值;指针对象保存其他对象的地址
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
C编程语言允许符号(变量)在内存中表示这些对象。当你申报时
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
int i
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
符号(变量)i表示内存中的某个整数对象。更具体地说,它表示此对象的值。您可以在程序中使用i来操纵该值
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
&我会在内存中给你这个对象的地址
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
指针对象可以保存另一个对象的地址。使用以下语法声明指针对象:
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
int*ptr
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
就像其他变量一样,指针变量代表一个对象的值,一个指针对象。这个值恰好是其他对象的地址。您可以这样设置指针对象的值
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
ptr=&i
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
现在,当你在程序中说ptr时,你指的是它的值,即i的地址。但是如果你说*ptr,你指的不是ptr的值,而是地址在ptr中的对象的值,即i
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
swap函数的问题是,您正在交换指针的值,而不是这些指针为其保存地址的对象的值。要获得对象的值,您必须使用*ptr。嗯,也许可以使用这个
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
void swap(int** a, int** b)
{
int** temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(&a, &b);
printf(“%d %d\n”), *a, *b);
}
不使用第三个变量(temp)
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
您需要为swap函数发送a和b的地址,因此在调用swap函数时必须调用ass swap(&a,&b)
这样你就可以传递地址,然后改变地址
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}
#define SWAP(a,b) ((a)=(b)+(a),(b)=(a)-(b),(a)=(a)-(b))
工作正常。一个明显的问题是,此实现与工作正常的实现之间有什么不同?(我知道这一个的问题是什么,我只是想帮你找到它。)(当然,所有热切期待的海狸都愿意直接跳到答案上来。)关于传递值的可靠碰撞课程。谢谢ppl。
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main()
{
int x = 5, y = 10;
int *a = &x, *b = &y;
swap(a, b);
printf(“%d %d\n”), *a, *b);
}