一篇关于指针的CSDN稿件居然没看懂
一篇关于指针的****文章居然没看懂
对话Linus Torvalds:大多黑客甚至连指针都未理解
http://www.****.net/article/2013-01-10/2813559-two-star-programming
“不懂指针”的开发者代码示例:
Linus Torvalds提供的解决方案:
高亮的两句有什么区别吗?真心的不懂指针了~
------解决方案--------------------
这两个只是1维与2维指针的区别。
前者传的是1维指针,所以必须得有返回头指针(1维指针没法修改指针实参本身,就像传值没法修改实参的值本身一样),并且还多了很多临界情况判断
后者传的是2维指针,所以不用返回值。代码也更
对话Linus Torvalds:大多黑客甚至连指针都未理解
http://www.****.net/article/2013-01-10/2813559-two-star-programming
“不懂指针”的开发者代码示例:
typedef struct node
{
struct node * next;
....
} node;
typedef bool (* remove_fn)(node const * v);
// Remove all nodes from the supplied list for which the
// supplied remove function returns true.
// Returns the new head of the list.
node * remove_if(node * head, remove_fn rm)
{
for (node * prev = NULL, * curr = head; curr != NULL; )
{
node * next = curr->next;
if (rm(curr))
{
if (prev)
prev->next = curr->next;
else
head = curr->next;
free(curr);
}
else
prev = curr;
curr = next;
}
return head;
}
Linus Torvalds提供的解决方案:
void remove_if(node ** head, remove_fn rm)
{
for (node** curr = head; *curr; )
{
node * entry = *curr;
if (rm(entry))
{
*curr = entry->next;
free(entry);
}
else
curr = &entry->next;
}
}
高亮的两句有什么区别吗?真心的不懂指针了~
C
linux
C++
------解决方案--------------------
这两个只是1维与2维指针的区别。
前者传的是1维指针,所以必须得有返回头指针(1维指针没法修改指针实参本身,就像传值没法修改实参的值本身一样),并且还多了很多临界情况判断
后者传的是2维指针,所以不用返回值。代码也更