我有一个链接列表,该列表接受一个输入字符串,并将每个字符串存储在列表的节点中。我要打印保存每个字符串的节点的十六进制地址。
我该怎么做?我尝试打印保存单词的十六进制地址,但是我还不知道它是否仍然是节点的相同地址,这是应该打印每个节点的功能:
// print the list
void printList(ListNodePtr currentPtr)
{
// if list is empty
if (isEmpty(currentPtr)) {
puts("List is empty.\n");
}
else {
puts("The list is:");
// while not the end of the list
while (currentPtr != NULL) {
printf("%s %p --> ", currentPtr->data, ¤tPtr);
currentPtr = currentPtr->nextPtr;
}
puts("NULL\n");
}
}
此功能可将每个单词保存在节点中
void insert(ListNodePtr *sPtr, char *value)
{
ListNodePtr newPtr = malloc(sizeof(ListNode)+1); // create node
if (newPtr != NULL) { // is space available
newPtr->data= malloc(strlen(value));
strcpy(newPtr->data, value);
newPtr->nextPtr = NULL; // node does not link to another node
ListNodePtr previousPtr = NULL;
ListNodePtr currentPtr = *sPtr;
// loop to find the correct location in the list
while (currentPtr != NULL) {
previousPtr = currentPtr; // walk to ...
currentPtr = currentPtr->nextPtr; // ... next node
}
// insert new node at beginning of list
if (previousPtr == NULL) {
newPtr->nextPtr = *sPtr;
*sPtr = newPtr;
}
else { // insert new node between previousPtr and currentPtr
previousPtr->nextPtr = newPtr;
newPtr->nextPtr = currentPtr;
}
}
else {
printf("Not inserted. No memory available.\n" );
}
}
答案 0 :(得分:3)
¤tPtr
为您提供了一个指向变量变量的指针,这实际上不是currentPtr
所指向的位置。 ¤tPtr
的值在循环中不会更改,因为变量本身不会更改位置。
如果要打印currentPtr
指向节点本身的位置,请打印纯currentPtr
。
答案 1 :(得分:1)
从下面的printList
的原型中,我们看到currentPtr
已经是指向ListNode
的指针(假设ListNodePtr
是{{1 }}。
typedef
因此,您只需打印ListNode*
作为节点的地址即可。
我尝试打印已保存单词的十六进制地址,但是我还不知道它是否仍然是节点的相同地址
仅当保存的单词是void printList(ListNodePtr currentPtr)
结构的第一个元素时,节点地址也将是保存的单词的地址。