为什么交换函数中的指针不更改 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;
}
我的问题:
- 代码不交换
- 交换函数中的指针显示我发送的地址指针的值为 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
.
我正在尝试使用指针交换两个浮点数,
我的代码:
#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;
}
我的问题:
- 代码不交换
- 交换函数中的指针显示我发送的地址指针的值为 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
.