Сегодня мне было скучно, и я решил избавиться от ржавчины в своих навыках Си, но я не могу объяснить это:
typedef struct Node
{
struct Node* prev;
struct Node* next;
void* data;
} Node_t;
Node_t* head = NULL;
void add(Node_t* head, void* data)
{
Node_t* newNode = (Node_t*)malloc(sizeof(Node_t));
Node_t* iterate = head;
newNode->next = newNode->prev = NULL;
newNode->data = data;
if(head == NULL)
{
/*printf("Check 0 %x\r\n", newNode);*/
head = (Node_t*)malloc(sizeof(Node_t));
head->next = head->prev = NULL;
head->data = data;
printf("Check 0.5 %x\r\n", newNode);
}
else
{
while(iterate->next != NULL)
{
iterate = iterate->next;
}
iterate->next = newNode;
newNode->prev = iterate;
}
}
int main(int argc, char** argv)
{
int addValue = 0;
int* printMe = 0;
Node_t* iterate;
for(addValue = 0; addValue < 10; addValue++)
{
add(head, &addValue);
printf("Check 1 %x\r\n", head);
}
........
Операторы printf печатают место в памяти, на которое указывает моя голова. Каждый раз, когда он вызывается из функции Add (), он печатает некоторую разумную область памяти, но как только он возвращает, он печатает 0 (NULL) в качестве значения указателя. два печатных заявления идут сразу за другим. Так почему же C обновляет мой глобальный указатель в функции Add (), но возвращает его после завершения вызова этой функции?