我正在嘗試使用指標交換兩個浮點數,
我的代碼:
#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 :
使用除錯器我得到
我不明白為什么會這樣,如果根據這個評論我有一個我發送的地址(假設我發送了 00001 )那么指向該地址的指標將是我的值(在本例中為 99 )但我得到0 ...
我會很感激任何幫助!
uj5u.com熱心網友回復:
正如評論所指出的,問題在于您的交換函式float
在使用double
變數時需要指標。
由于float
type 用于描述超過 4 個位元組(32 位)的double
浮點值,而 type 描述了超過 8 個位元組(64 位)的浮點值,因此當您將double
指標傳遞給將它們視為float
型別的函式時,這些值被錯誤地分配(超過 4 個位元組而不是 8 個位元組)從一個記憶體區域到另一個記憶體區域。
a 的一半位double
不構成有效對應 float
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/485092.html