我有几个问题:
1)什么是
ps_lst_tmp->ps_greather = & ps_lst_tmp [1];
意思?
2)如果我正确理解指针,那么如果我在代码末尾写入
ps_lst_tmp++;
然后指针ps_lst_tmp将指向下一个元素并且... ps_lst_nodes是否也指向下一个元素?
整个代码:
struct s_node_lnk_lst /* structure used for list */
{
sMSC_NODE *ps_node; /* node */
unsigned long int uli_occurs; /* occurences */
struct s_node_lnk_lst *ps_greather; /* greather neighbour in list */
} *ps_lst_nodes = NULL,*ps_lst_tmp;
ps_lst_nodes = (struct s_node_lnk_lst *) malloc
(sizeof (struct s_node_lnk_lst) * uli_nb_items);
ps_lst_tmp = ps_lst_nodes;
ps_lst_tmp->ps_greather = & ps_lst_tmp [1];
谢谢
答案 0 :(得分:0)
ps_lst_tmp->ps_greather = & ps_lst_tmp [1];
这意味着ps_lst_tmp->ps_greather
现在指向ps_lst_nodes
与ps_lst_tmp->ps_greather = ps_lst_tmp + 1
相同。
不,它不会。更改变量本身的值,不会更改任何其他变量。
但是你可以指向一个带有多个指针的变量,当变量被修改时,所有指针都会看到'改变。 要在这种情况下执行此操作,您需要一个指向指针的指针:
struct s_node_lnk_lst** p = &ps_lst_nodes;
p
现在指向ps_lst_nodes
,如果ps_lst_nodes
递增,则可以使用指针p
通过解除引用来查看更改:*p
答案 1 :(得分:0)
ps_lst_tmp->ps_greather = & ps_lst_tmp [1]
与ps_lst_tmp->ps_greather = ps_lst_tmp + 1
ptr + i
相当于&ptr[i]
,ps_lst_tmp++
与ps_lst_tmp = &ps_lst_tmp[1]
相同。
因此ps_lst_tmp++
将指向ps_lst_nodes[1]
。同时ps_lst_nodes
不会被更改