所以,我必須交換兩個節點的資料。這是我創建的函式:
void swap(struct st* a, struct st* b)
{
struct st* temp;
temp->lname = a->lname; //lname is an array of chars
a->lname = b->lname;
b->lname = temp->lname;
temp->marks = a->marks; //marks is an array of doubles
a->marks = b->marks;
b->marks = temp->marks;
}
所以我不明白為什么會發生錯誤。錯誤如下: E0137 運算式必須是可修改的左值
uj5u.com熱心網友回復:
本宣告
struct st* temp;
宣告一個具有不確定值的未初始??化指標。所以將指標解參考為
temp->lname = a->lname;
呼叫未定義的行為。
其次,陣列沒有賦值運算子。陣列是不可修改的左值。和這個錯誤資訊
E0137 運算式必須是可修改的左值
意味著您正在嘗試將一個陣列分配給另一個陣列。
如果您需要st為兩個節點交換結構的資料成員,則該函式可以如下所示
void swap(struct st* a, struct st* b)
{
struct st temp = *a;
*a = *b;
*b = temp;
struct st *p = a->next;
a->next = b->next;
b->next = p;
}
uj5u.com熱心網友回復:
您正在嘗試更改陣列的位置a->lname = b->lname;。那是不允許的。您需要strcpy將字串從一個連接struct st到另一個。此外,struct st* temp;是一個未初始化的指標。它不指向任何已分配的記憶體,因此程式在嘗試使用它時具有未定義的行為。
另一種選擇是struct st一次復制整個:
void swap(struct st* a, struct st* b)
{
struct st temp = *a; // initialize temp with *a
*a = *b;
*b = temp;
// swap next pointers back
b->next = a->next;
a->next = temp->next;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/373372.html
