我是 C 的新手,并且對 Visual Studio Code 有點困惑。
我不明白這是什么意思。
當我在另一個編譯器中運行代碼時,它確實運行了。
void swap(int* x, int *y);
int exe1(int* num1Ptr, int* num2Ptr, int* num3Ptr);
int main()
{
int a = 123, b = 456 , c =4;
int* pa, * pb ,*pc;
pa = &a;
pb = &b;
pc = &c;
printf("pa = %d , pb = %d, pc = %d\n", *pa, *pb, *pc);
exe1(pa, pb, pc);
printf("pa = %d , pb = %d, pc = %d\n", *pa, *pb, *pc);
return 0;
}
void swap(int* x, int* y) {
int temp = *x;
*x = *y;
*y = *x;
}
int exe1(int* num1Ptr, int* num2Ptr, int* num3Ptr) {
if (*num2Ptr > *num1Ptr) {
swap(*num1Ptr, *num2Ptr);
}
if (*num3Ptr > *num2Ptr) {
swap(*num3Ptr, *num2Ptr);
}
if (*num3Ptr > *num1Ptr) {
swap(*num3Ptr, *num1Ptr);
}
}
uj5u.com熱心網友回復:
您的swap例程需要兩個指標int,您將兩個ints傳遞給它。從呼叫中洗掉多余的星號:
swap(*num1Ptr, *num2Ptr);
應該讀
swap(num1Ptr, num2Ptr);
加上swap()怪盜在回答中指出的錯誤。
uj5u.com熱心網友回復:
當我們嘗試訪問我們無權訪問的記憶體地址時,就會發生“讀取訪問沖突”。在這種情況下,這是因為swap(*num1Ptr, *num2Ptr);
這個函式需要一個指標(與記憶體地址有關),應該被呼叫為 swap(num1Ptr, num2Ptr);
*num1Ptr取消參考指標,它現在是一個整數值,而不是指向有效地址的指標。例如*num1Ptr可以123在上面的代碼中。位于記憶體地址的任何內容123都可能被系統使用,我們沒有對它的讀/寫訪問權限。除錯器拋出訪問沖突。
編譯器還應該列印警告。
*y = temp;如前所述,交換功能需要修復。
與您的問題無關exe1,按此順序比較值
p1 & p2
p2 & p3
p1 & p3
例如,如果這打算用作排序函式,則第三個條件可以否定第一個條件。您可能希望更改比較順序,如下所示:
void swap(int* x, int* y)
{
int temp = *x;
*x = *y;
*y = temp;
}
void exe1(int* p1, int* p2, int* p3)
{
if (*p1 < *p2) swap(p1, p2);
if (*p1 < *p3) swap(p1, p3);
if (*p2 < *p3) swap(p2, p3);
}
int main()
{
int a, b, c;
a = 123, b = 456, c = 4;
exe1(&a, &b, &c); printf("%d, %d, %d\n", a, b, c);
a = 123, b = 456, c = 4000;
exe1(&a, &b, &c); printf("%d, %d, %d\n", a, b, c);
return 0;
}
uj5u.com熱心網友回復:
void swap(int* x, int* y) {
int temp = *x;
*x = *y;
*y = *x; // this should be *y = temp;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/375360.html
上一篇:Docker映像不適用于ASP.NETCore2.2
下一篇:C 中簡單代碼中的奇怪語法錯誤
