zoukankan      html  css  js  c++  java
  • C指针与数组

    • 通过指针遍历数组的小把戏
    #include<stdio.h>
    #include<stdlib.h>
    #include<Windows.h>
    void main()
    {
        int a[10] = {1,2,3,4,5,6,7,8,9,10};
        for (int *p = a; p <= a + 9; p++)
        {
            printf("值是%d,地址是%p
    ",*p,p);
        }
        getchar();
    }

    •  a代表指向整型数组首元素地址的指针,被称作指向整型类型的常量指针,原因见下属上机实验结果,而p相对而言就是变量指针,可以把数组a[10]的首地址a赋值给p

     左值,处于赋值号左边可以被赋值的变量,实验结果是提示左值不可赋值

    • 也可以巧妙安排借助指针改变地址中存放的值
    void main()
    {
        int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        time_t st;
        srand((unsigned int)time(&st));
        //利用指针替换数组a
        int *p = a;
        for (int i = 0; i < 10; i++)
        {
            *p = rand()%100;//指针当前位置的元素改为以时间为种子生成的随机数
            p++;//指针向前推进,遍历到数组的下一个元素
        }
        for (int *p = a; p < a + 10;p++)
        {
            printf("当前元素是%d,地址是:%p
    ",*p,p);
        }
        system("pause");
    }

    输出结果:

     

    •  也可以利用指针运算性质,不断的推进地址,达到访问地址中存放的值的效果
    void main()
    {
        time_t ts;//声明了一个时间
        int a[10] = {1,2,3,4,5,6,7,8,9,10};
        srand((unsigned int)time(&ts));//以时间为种子生成随机数,如果省略此行代码,则下一行代码生成的总是一个数
        printf("此刻,生成的随机数是%d
    ", rand() % 100);//生成0-99----对100取余,肯定数字小于100
        int i = 0;
        int num[10];
        for (int *p = num; p < num + 10;p++)
        {
            num[i] = rand() % 100;
            i++;
        }
        int *q = num;//这里用到了num是数组首元素地址的特性q+i=&num[i]  *(q+i)=num[i]
        for (int i = 0; i < 10; i++)
        {
            printf("q[i]=%d, *(q+i)=%d
    ",q[i],*(q+i));
        }
        getchar();
    }

    •  求随机数组的最大值及其下标
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    void main()
    {
        time_t st;
        srand((unsigned int)time(&st));
        int crazyarray[10];
        for (int i = 0; i < 10; i++)
        {
            crazyarray[i] = rand() % 100;
        }
        int *p = crazyarray;
        int max = *p;
        int index = 0;
        for (int *q = crazyarray; q < crazyarray + 10; q++)
        {
            printf("%d
    ", *q);
            if (*q>max)
            {
                max = *q;
                index= q - p;
            }
        }
        printf("最大值是%d,下标是%d
    ",max,index);
        getchar();
    }

    输出结果:

  • 相关阅读:
    Jmeter+maven+Jenkins构建云性能测试平台(mark 推荐)
    Jenkins配置自动化构建
    跟我学Shiro---无状态 Web 应用集成
    Tomcat下部署多个项目
    Guava 教程1-使用 Google Collections,Guava,static imports 编写漂亮代码
    Spring-security-Oauth2.0
    OAuth2
    从产品角度看,怎样的知识付费才是用户要的?
    REST API 基于ACCESS TOKEN 的权限解决方案
    一个想法照进现实-《IT连》创业项目:关于团队组建
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/11953477.html
Copyright © 2011-2022 走看看