为什么交换函数中的指针不更改 C 中的值?

Why are Pointers in Swap Function not Changing values in C?

我正在尝试使用指针交换两个浮点数,

我的代码:

#include <stdio.h>

void swap(float* p, float* q);


int main() {
    double num1,num2;
    printf("Please write 2 numbers ");
    scanf("%lf %lf",&num1 , &num2);
    swap(&num1,&num2);
    printf("\nnum1 is  : %.2lf \n",num1);
    printf("num2 is  : %.2lf \n",num2);

    return 0;
}

void swap(float* p, float* q){
    float a;
    a=*p;
    *p=*q;
    *q=a;

}

我的问题:

  1. 代码不交换
  2. 交换函数中的指针显示我发送的地址指针的值为 0。

例如 - 输入 99 22 -> 给我 0 :

Using Debugger I get

我不明白为什么我会得到那个,如果 according to this comment 我有地址 我发送的(假设我发送了 00001 )然后指向该地址的指针将是我的值(在此示例中为 99 )但我得到 0 ...

如有任何帮助,我将不胜感激!

正如评论所指出的,问题是当您使用 double 变量时,您的交换函数采用 float 指针。

由于 float 类型用于描述超过 4 个字节(32 位)的浮点值,而 double 类型描述超过 8 个字节(64 位)的浮点值,当您通过 double 指向将它们视为 float 类型的函数的指针,值被错误地从一个内存区域分配给另一个内存区域(超过 4 个字节而不是 8 个字节)。

double的一半位没有使有效对应float.