• 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();
    }

    输出结果:

  • 相关阅读:
    Redis面试题
    Mysql面试题
    Mybatis面试题
    Springmvc面试题
    spring常见面试题
    优雅的参数校验
    Linux安装mongodb
    Redis缓存的雪崩、穿透、击穿
    语音识别(LSTM+CTC)
    大数据利器Hive
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/11953477.html
Copyright © 2020-2023  润新知