在这里完成C newb.试图通过弄乱简单的代码片段来学习/理解指针.
#include <stdio.h>
void swap(int *px, int *py)
{
int tmp;
tmp = *px;
*px = *py;
*py = tmp;
}
main()
{
int *a, *b;
*a = 1;
*b = 2;
swap(&a,&b);
printf("%d %d\n", *a, *b);
}
Run Code Online (Sandbox Code Playgroud)
为什么这无效?当我*
从main中删除解除引用操作符时,代码有效.
从概念上讲,这似乎应该有效.我初始化a
和b
指向分别指向int 1
和int 2
.然后我发送他们的地址swap()
,这应该切换他们指向的地方.
Mar*_*ins 11
有几个问题.首先,指针a
并b
没有指向有效的内存.因此,未定义整数值的赋值(可能崩溃).其次,调用swap(假设a和b指向有效内存)不应该包含地址(它当前正在发送指针变量的地址).
以下更改将使其工作:
int a, b;
a = 1;
b = 2;
swap(&a,&b);
printf("%d %d\n", a, b);
Run Code Online (Sandbox Code Playgroud)
该swap()
功能是确定的,但里面主要你正在服用的地址指针,所以你传递int**
参数int*
的参数.
int *a, *b;
swap(&a,&b);
Run Code Online (Sandbox Code Playgroud)
要修复它,请将代码替换为 main()
:
int a = 1, b = 2;
swap(&a,&b);
printf("%d %d\n", a, b);
Run Code Online (Sandbox Code Playgroud)