c语言关于数组的练习平时练习


若有声明  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。

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7603146
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:c语言 不重复随机数以及随机数间隔重复问题
  • 你还可以看下c语言参考手册中的 c语言-常量及字面量
  • 除此之外, 这篇博客: C语言不带表头结点的单链表操作中的 随机数倒叙排列 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 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的头地址,尾地址互换插入到链表中去,

    **

  • 您还可以看一下 贺利坚老师的C语言及程序设计初步课程中的 数值型数据的存储小节, 巩固相关知识点