若有声明 int a[] = {0,1,2,3,4,5,6,7,8,9}, *p = a; 则p[2]表示数组元素a[2]的地址
错误 求解析
不对,p+2才是,p[2]和a[2]是一样的
p的这个指针已经定义了是吗?如果已经定义了
只需要将p指向a即可。如下所示
p=a;
这样p[2]对应a[2]的数据。
p是一个数值,即a[0]的值,因此不能将a的地址给到p。
int insert_node_mid_sort(Link * head,Link new_node)
{
Link p,q;
p = q = *head;
if(NULL == *head) //空表时将第一个结点插入此时头结点地址不为空
{
*head = new_node;
new_node->next = NULL;
}
else if((*head)->num > new_node->num) //当结点的num>头结点时将他插入到头结点前面
{
new_node->next = *head;
*head = new_node;
}
else
{
while(p != NULL && p->num < new_node->num) //参考下图分析代码 (&&有一个不满足条件时就跳出代码执行下面的代码)
{
q = p;
p = p->next;
}
q->next = new_node;
new_node->next = p;
}
}
只需要将6的头插入到5的尾,6的尾巴插入到7的头就可以了。
while(p != NULL && p->num < new_node->num)
因为此时链表中已经有了结点,所以P不是NULL,切有num,此时5<6,
p,q,head,地址相同,此时p指向下一个结点
q = p;
p = p->next;
q->next = new_node;
new_node->next = p;
此时将new_node的头地址,尾地址互换插入到链表中去,
**