У меня есть вопрос о прохождении через указатели в C. Я проиллюстрирую мой вопрос через этот фрагмент кода, который я написал:Проходя мимо указателя в C
int main() {
List *head = (List *)malloc(sizeof(List));
head->data = 0;
head->next = NULL;
insertEnd(head, 3);
//List *temp = head;
insertEnd(head, 4);
PrintList(temp);
return 0;
}
void insertEnd(List *node, int elem) {
while (node->next != NULL) {
node = node->next;
}
List *new_node = (List *)malloc(sizeof(List));
new_node->data = elem;
new_node->next = NULL;
node->next = new_node;
}
void PrintList(List *node) {
while (node) {
printf ("%i ->", node->data);
node = node->next;
}
}
В приведенном выше фрагменте кода, я создаю указатель Список и переместите его в мою функцию insertEnd() два раза. Если вы заметили в моей функции insertEnd(), я на самом деле перемещаю это переданное в указателе, выполняя «node-> next»
Если я меняю адрес, этот указатель указывает на мою функцию insertEnd(), тогда как получилось, когда я вызываю PrintList() так, как если бы расположение указателей не перемещалось!
перечень печать() возвращает: «0 -> 3 -> 4 ->»
Является ли это потому, что, проходя мимо указателя, вы фактически передавая новую физическую копию указателя в функцию, аналогичную Попутно по значению, кроме как в этом случае вместо копирования по всей структуре данных/данных, вы просто копируете переменную указателя? Я надеюсь, что это имеет смысл ..
Ваше объяснение кажется правильным для меня. Вы передаете значение указателя в качестве параметра, который позволяет вам изменять данные, на которые указывает указатель, но не сам указатель. –
Да, это то, что я думал, но возиться с C, заставил меня угадать мои основы. Я в основном кодирую языки гораздо более высокого уровня, поэтому его новое для меня – AyBayBay
Кроме того: [не выдавать результат malloc] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of -malloc). – pzaenger