• 指针和数组


    同一指针相减的绝对值得到的是之间元素的个数

    1. #include"stdio.h"
    2. #include"string.h"
    3. int main()
    4. {
    5. int arr[10]={0};
    6. printf("%d\n",&arr[9]- &arr[0]);
    7. return 0;
    8. }

    不同类型的指针减去指针没有意义

    地址加地址,指针加指针没有意义

    地址向后移,指针相比较,指针减减就是减去一个整数

    简化

    1. #include"stdio.h"
    2. #include"string.h"
    3. int main()
    4. {
    5. int ss=5;
    6. float value3[ss];
    7. float *vp;
    8. for(vp=&value3[ss-1];vp>=&value3[0];vp--)
    9. {
    10. *vp=1;
    11. }
    12. for(int i=0;i<5;i++)
    13. {
    14. printf("%.f\n",value3[i]);
    15. }
    16. return 0;
    17. }

    虽然简化好,但是我们C语言要求是不允许这样写的,虽然大部分编译器是可以允许我这样写的

    有3个指针,中间是一个数组arr,有个指针指向中间,其他两个指向两边,一个指向前面,一个人指向后面

    我们C语言编译器中说指针允许往后比较大小,但不允许往前比面的指针比较大小

    指针和数组

    //数组:是一组相同类型元素的集合

    //指针:指针就是地址

    //指针变量:是一个变量,存放的是地址

    数组大小取决他有多少个元素,取决于每个元素的类型

    指针大小取决他处于什么操作系统是8字节还是4字节32位和64操作系统

    数组名表示首元素的地址,但是有两种情况例外sizeof(数组名)和&(数组名)

    sizeof当中指的是整个数组所占的内存大小(单位:字节)

    &这里表示的数组名表示整个数组,取出的是整个数组的地址

    通过数组的首元素的地址用指针访问大小

    数组通过指针访问

    1. #include"stdio.h"
    2. #include"string.h"
    3. int main()
    4. {
    5. int arr[10]={0,122312,312,312,3,12,312,312,3};
    6. int sz=sizeof(arr)/sizeof(arr[0]);
    7. int *p=arr;
    8. for(int i=0;i<sz;i++)
    9. {
    10. printf("%d\n",*(p+i));
    11. }
    12. return 0;
    13. }

    数组和指针的地址是一样的,说明是可以的

    1. #include"stdio.h"
    2. #include"string.h"
    3. int main()
    4. {
    5. int arr[10]={0,122312,312,312,3,12,312,312,3};
    6. int sz=sizeof(arr)/sizeof(arr[0]);
    7. int *p=arr;
    8. for(int i=0;i<sz;i++)
    9. {
    10. printf("%p %p\n",&arr[i],p+i);
    11. }
    12. return 0;
    13. }

    下面那个用数组名也是可以用的,因为他也表示一个地址,加1就会找后面那个元素的地址

    用指针调用函数

    1. #include"stdio.h"
    2. #include"string.h"
    3. void test(int *pp,int ss);
    4. int main()
    5. {
    6. int arr[10]={0,122312,312,312,3,12,312,312,3};
    7. test(arr,10);
    8. return 0;
    9. }
    10. void test(int *pp,int ss)
    11. {
    12. for(int i=0;i
    13. {
    14. printf("%d\n",*(pp+i));
    15. }
    16. }

    用数组调用函数求出数组各个元素的值

    1. #include"stdio.h"
    2. #include"string.h"
    3. void test(int arr[],int ss);
    4. int main()
    5. {
    6. int arr[10]={0,122312,312,312,3,12,312,312,3};
    7. test(arr,10);//这里传过去的是一个首元素地址
    8. return 0;
    9. }
    10. void test(int arr[],int ss)
    11. {
    12. for(int i=0;i
    13. {
    14. printf("%d\n",arr[i]);//这里其实编译器会算成*(arr+i)解引用
    15. }
    16. }
  • 相关阅读:
    操作系统小练习 任务管理器
    kubernetes资源监控
    公司产品太多了,怎么实现一次登录产品互通?
    陪诊系统|陪诊系统解放繁琐,为陪诊添便利
    信息学奥赛一本通:1178:成绩排序
    ASP.NET Core框架探索之Authorization
    Java程序员接单分享
    Windows 安装CMake
    nginx 做转发处理,指定目录访问和tp同级的目录
    win10 python3.7.5 安装dlib
  • 原文地址:https://blog.csdn.net/2301_77634163/article/details/139569813