我可以指向数组的特定地址吗?

时间:2016-02-20 11:11:03

标签: c pointers structure

我有几个问题:

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];

谢谢

2 个答案:

答案 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不会被更改