-Вы должны использовать двойной указатель, так как вам нужно изменить указатель на вашу структуру, и вызов по ссылке не разрешен в C.
-Это не будет работать с одним указателем.Потому что вы хотите изменить указатель на ваш объект.Вы делаете это с помощью оператора *currItem = (*currItem)->next;
Чтобы изменить его навсегда, вам нужно использовать указатель на него.Что заставляет вас использовать двойной указатель.
Подумайте об этом так:
у вас есть целочисленная переменная a
, которую вы хотите, чтобы функция изменила свое значение.Вы просто вызываете эту функцию с указателем на переменную a
, например:
void changeTheValue(int *x)
{
*x = 7;
}
void main()
{
int a = 5;
changeTheValue(&a);
}
, и в вашем случае вы хотите изменить значение указателя и просто передать его указатель наФункция. (двойной указатель) просто так. Если вы хотите изменить значение чего-либо с помощью функции, вам нужно передать указатель на функцию.
- Когда вы вызываете malloc, вам нужен пробел из него.И вы заявляете, что вы хотите пространство размером с размер вашей структуры.(Например, когда вы это сделали здесь list = (struct item*) malloc(sizeof(struct item));
), и malloc выделяет пространство размером с вашу структуру.Если размер вашей структуры составляет 1 байт, то у вас есть 1-байтовое пространство, если это 4, то у вас есть последовательные 4 байта.Видите, это то, как ваша структура хранится в памяти.Если вы объявляете переменную структуры или массив и т. Д., То ваша структура сохраняется в памяти, как (не знаю, хорошая ли это метафора) как массив.Сначала идет первый член, а затем второй ...
скажем, если у вас есть структура
struct myStruct
{
int a;
float b;
char c;
};
, то память выглядит как
a
b
c
ps: вы делаете недопустимый вызов free на линии free(intTemp);
вы * освобождаете * переменную, котораяВы не * Malloc * Ed.