2019.09.28指针和数组

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/KaiFcookie/article/details/101657793

2019.09.28指针和数组

     2019.09.28
     
     

        指针

               指针的重要性      指针是c语言的灵魂

                   定义         地址  内存单元的编号(从0开始的非负整数  ,范围:0---pppppppp {0-4g01})

                 指针就是地址 地址就是指针
                 指针变量是存放内存单元地址的变量
                 指针的本质是一个操作受限的非负整数
                 

                      
        结构体
        动态内存的分配和释放


 EG
      #include <stido.hz>
      int main (void)
      {
          int *p;     //p是一个变量名字,int*表示该p变量只能存储int类型变量的地址
          int  i=10;
          int  j;
          p=&i        //将i的地址发送给p,p指向i,*p代表i 
          j=*p        //等价于j=i
                      //*p最终指向一个不确定的变量,因为p没有一个确定的整形变量所以是一个垃圾值
          printf("i=%d,j=%d,*p=%d/n", i, j ,*p);


      return 0;

}

          常量和表达式前不能加&

如何通过被调函数修改主调函数中普通变量的值

         1,实参为相关变量的地址
         2,形参以该变量的类型为类型的指针变量
         3,在被调函数中通过  *形参变量名  的方式就可以修改主调函数中的普通函数的值




        指针和数组



              指针和一维数组
                  数组名
                     一维数组名是个指针常量
                     它4存放的是一维数组第一个元素的地址,它的值不能被改变
                      一维数组名指向的是数组的第一个元素

               下标和指针的关系

                        a[i]<<==>>   *(a+i)

                        假设指针变量的名字为p
                        则p+i的值是p+i*(p所指向的变量所占的字节数)
                 
                指针变量的运算

                         指针变量不能相加,不能相乘,不能相除
                         如果两指针变量属于同一数组,则可以相减
                         指针变量可以加减一整数,前提是最终结果不能超过指针变量的值

                                p+i的值是p+i*(p所指向的变量所占字节数)
                                p-i的值是p-i*(p所指向的变量所占的字节数)
                                p++  <==>    p+1
                                p--  <==>    p-1
                


                   举例

                        如何通过被调用函数修改主调函数中一维数组的内容

                        两个参数
                            存放数组首元素的指针变量
                            存放数组元素长度的整形变量


             #include<stido.h>
             void  f  (int *i)            //不是定义了一个名字叫*i的形参,而是定义了一个形参名字叫i类型是int*   能存放整形变量地址
            {
                i=100;
            }
                 int  main (void)
            {
                 int  i=9;
                 f (i);
                 printf(“i=%d\n",i);
                 return  0;
            }







            #include <stdio.h>
            int  main (void)
           {
                  int  a[5]={1,2,3,4,5};           //a只存放一个函数地址 指向第一个   指向a[0]
                  printf ("%p\n",a+1);
                  printf ("%p\n",a+2);
                  printf ("%p\n",a+3);
                  printf ("%p\n",a+4);              //*a+3<==>a[0]+3

             return 0;
            }







      【1】#include <stdio.h>
           void show_Array(int  *p,int  len)
          {
                p[0]=-1                  //p[o]=*p   p[2]=*(p=2)=*(a=2)=a[2]
                                         //p[i]就是主函数的a[i]
           }
           int  main  (void)
           {
                int  a[5]={1,2,3,4,5};
                show_Array (a,5),         //a等价于&a[0]     &a[0]本质是int*类型
           printf("%d\n",a[2]);
           return  0;
           }



      【2】#include  <stdio.h>
           void  show_Array(int  *p,int  len)
           {
               int  i=0;
               for(i=0;i<len;++i);
            }
           int  main (void)
           {  
               int a[5]={1,2,3,4,5};
            show_Array(a,5); 
            return 0
            }     

猜你喜欢

转载自blog.csdn.net/KaiFcookie/article/details/101657793