r***h 发帖数: 70 | 1 在看Programming interview exposed
不太明白里面讲link list插入新head的程序的例子.给出2个例子,书上说第一个是错的
,第二个才对.不明白为什么必须用**head而不是*head,难道head本身做为pointer pass
给函数不改变指针的内容吗? 请帮忙讲解一下,谢谢!
For example, the following code is incorrect because it fails to update the
head pointer in the calling function:
int BadInsert(element *head)
{
element *newElem;
newElem = (element *) malloc(sizeof(element));
if (!newElem) return 0;
newElem->next = head;
head = newElem;
return 1;
}
The correct way to update the head pointer in C is to pass a pointer to the
head pointer, allowing you to modify the calling function's pointer to the
first element, as shown here:
int Insert(element **head) {
element *newElem;
newElem = (element *) malloc(sizeof(element));
if (!newElem) return 0;
newElem->next = *head;
*head = newElem;
return 1;
} | j*a 发帖数: 14423 | 2 int swap(int *a, int *b)
int main() {
int x, y;
swap(&x, &y);
}
pass
the
【在 r***h 的大作中提到】 : 在看Programming interview exposed : 不太明白里面讲link list插入新head的程序的例子.给出2个例子,书上说第一个是错的 : ,第二个才对.不明白为什么必须用**head而不是*head,难道head本身做为pointer pass : 给函数不改变指针的内容吗? 请帮忙讲解一下,谢谢! : For example, the following code is incorrect because it fails to update the : head pointer in the calling function: : int BadInsert(element *head) : { : element *newElem; : newElem = (element *) malloc(sizeof(element));
| r***h 发帖数: 70 | 3 那个function按引用传递指针的看的懂.
但问题是为啥head必须用2个*,我按下面这么理解吗?
element **head = some_value;
BadInsert(*head);
Insert(head);
【在 j*a 的大作中提到】 : int swap(int *a, int *b) : int main() { : int x, y; : swap(&x, &y); : } : : pass : the
| a**h 发帖数: 2150 | 4 如果第一段function正确,调用格式应该是badinsert(&head),第一段function修改的是
原来head本身内容,而不是new head
【在 r***h 的大作中提到】 : 那个function按引用传递指针的看的懂. : 但问题是为啥head必须用2个*,我按下面这么理解吗? : element **head = some_value; : BadInsert(*head); : Insert(head);
|
|