为什么这个C指针代码不起作用?

bgc*_*ode 3 c pointers

在这里完成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中删除解除引用操作符时,代码有效.

从概念上讲,这似乎应该有效.我初始化ab指向分别指向int 1int 2.然后我发送他们的地址swap(),这应该切换他们指向的地方.

Mar*_*ins 11

有几个问题.首先,指针ab没有指向有效的内存.因此,未定义整数值的赋值(可能崩溃).其次,调用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)


Hen*_*man 6

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)