• 带领大家认识 :指针数组,浅浅分析:数组名与&数组名的区别联系


    对于刚刚见到指针数组的小白而言,需要知道:指针数组是指针?还是数组??

    那么请问:热爱学习的你是个好孩子,你你是好呢?还是孩子呢??

    答案显而易见:指针数组是个数组!!

    由:整型指针 : int * point ;能够指向整型数据的指针!(存放整型变量的地址)

          浮点型指针: float *pf ;能够指向浮点型数据的指针!(存放字符变量的地址)

    那么:数组指针应该是:能够指向数组的指针!(存放数组的地址)

    下面笔者用代码来带领大家分析:

    1. int a = 10;
    2. int* p1 = &a;

    在上述代码中p1 的类型为:int * ;(去掉名字剩下的就是类型)

    因此,对于:

    1. char ch = 'w';
    2. char p2 = &ch;

    在上述代码段中:p2的类型为: char *;(去掉名字剩下的就是类型)

    因此对于一个数组:

    1. int arr[10] = { 1,2,3,4,5 };
    2. int(*pa)[10] = &arr;

    由: &arr 取出的是数组的地址,存放到pa中,pa 是数组的指针变量

    *pa :指向10个元素为int类型的数组!

    因此:

    int(*pa)[10] = &arr;

    为数组指针:

    数组指针的类型为:int (*)[10];

    即:

    1. int* p[5];
    2. int(*p)[5];

    是两个不同的指针!请大家分清楚!!!

    前者为:指针数组,后者为:数组指针!

    数组名与&数组名的区别联系

    对于数组名,大家并不陌生!

    在笔者下面的内容需要用到:数组名是数组首元素的地址!

    有俩个列外需要大家注意:(1)sizeof(数组名) 在这里数组名表示整个数组!

    (2)&(数组名) 取出的是整个数组的地址!

    希望大家谨记!!!

    列如:

    1. int arr[10] = { 0 };
    2. int(*p)[10] = &arr;

    在上述代码段中,&arr 的类型为: int (*)[10] ;是一种指针类型!

    数组的地址+1,跳过整个数组的大小!!

    言归正传,上面是笔者进行下面代码的基础知识,及其扩展,希望大家认真思考笔者将要进行的内容!

    1. #include <stdio.h>
    2. int main()
    3. {
    4. int arr[10] = { 0 };
    5. printf("%p\n", arr);
    6. printf("%p\n", &arr[0]);
    7. printf("%p\n", &arr);
    8. printf("\n");
    9. printf("%p\n", arr);
    10. printf("%p\n", arr+1);
    11. printf("\n");
    12. printf("%p\n", &arr[0]);
    13. printf("%p\n", &arr[0]+1);
    14. printf("\n");
    15. printf("%p\n", &arr);
    16. printf("%p\n", &arr+1);
    17. }

    在上述代码中,代码的内容显而易见,在此笔者就不做过多的讲述!

    需要强调的就是:%p是用来打印地址的!!

    下面请看笔者的代码运行结果为:

    根据代码的运行结果,我们可以看出来:

    1. printf("%p\n", arr);
    2. printf("%p\n", &arr[0]);
    3. printf("%p\n", &arr);

    运行结果一样!因此地址也是一样的!

    1. printf("%p\n", arr);
    2. printf("%p\n", arr+1);
    3. printf("%p\n", &arr[0]);
    4. printf("%p\n", &arr[0]+1);

    由地址的最后数字的改变可以看出来:(8——》’C‘(12))跳过了四个字节!一个int !

    然而:由:

    1. printf("%p\n", &arr);
    2. printf("%p\n", &arr+1);

    这个的运行结果:(68——》90)可以看出来:跳过了整个数组的大小!!

    所以出现那个运行结果的差距!

  • 相关阅读:
    性能测试-数据库
    【云原生之Docker实战】使用Docker部署Snipe-It固定资产管理平台
    Blazor前后端框架Known功能介绍:系统安装激活及自定义
    Javase | 包装类
    Dart(4)-类型与运算
    基于javaweb的家庭理财系统(java+ssm+jsp+tomcat8+mysql)
    【BUG记录】Python中的相对文件路径
    vue移动端Tabbar 标签栏(简单)
    记一次jenkins发送邮件报错 一直报错 Could not send email as a part of the post-build publishers问题
    438页19万字农牧业综合服务信息化减灾应急建设方案
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/126762387