• 指针


    //1.指针:地址
    //2.指针变量:存放地址的变量
    //3.&取地址运算符  *取值运算符  %p地址站位符
    //4.int *p=NULL;      这里的*号只是提醒这是一个指针
    //5.p=&a;             取出a的值
    //6.printf("%p",p);   打印这个地址
    //7.printf("%d"*p);   打印地址中存的值
    //8.int a=10;         *&a;如果同时使用*和&作用会被抵消
    //9.指针变量存的是内存的编号,这个编号占8个字节
    //10.int *p=0x0;  p=p+1 对指针变量进行整形数加减,int类型一次移动4个字节 ,char类型一次移动1个字节,double类型一次移动8个字节,移动位置和类型有关
    //***************************************************************************************************************************
        
    //指针和数组之间的关系
    /*
      1.一个数组的数组名其实就是地址,而且是首地址,而且是常量;
      2.计算机内存划分为五个区域:①栈区 ②堆区 ③常量区 ④静态区 ⑤代码区;所有的变量都被存放在栈区(不包括全局变量) ,自己申请的内存是放在堆区中,所有程序中的常量都被放在了常量区(常量区的东西无法改变),全局变量放在静态区,用static标注的也放在静态区.
      3.指针变量指向一个数组就是令指针变量等于数组名
        int a[10]={0};
         int *p=a;
      4.最正常的形式:a[i];
        文艺型的形式:p[i];
        闷骚型的形式:*(p+i);
        2B型的形式 :*(a+i);
      5.指针变量的大小跟操作系统有关
      6.指针变量取值的时候,注意和数据类型一致,否则容易出错
    *****************************************************************************************************************************
     //指针和字符串的关系
     
     
     
     
     
     
        
        */
    // int a=0;
    // scanf("%d",&a);
        
        
    //    int *p=NULL;         //这就是一个指针 NULL是空的意思 告诉我们这个指针变量什么也没指
    //    int a=200;
    //    p=&a;                //&取址符,取a的地址
    //    printf("%p ",p);    //系统分配的地址
    //    printf("%d",*p);     //取出地址中a的值

    /*
        
        int *p=NULL;
        int a[5]={1,2,3,4,5};
        p=a;
        printf("%d ",p[0]);    //可以打印出1
        printf("%d",*(p+1));    //和数组配套使用 这种方法可以取出数组中相应的值,+1表示取第二个值
        
      */
    //使用指针时 注意不要越界
        
        
     //定义一个数组  使用指针输出数组中的值
    /*
        int m[10]={1,2,3,4,5,6,7,8,9,0};
        int *p=NULL;
        p=m;
        for(int i=0;i<10;i++)
        {
            printf("%d  ",*(p+i));  //p[i]也可以取出地址中的值,输出结果一样
        }
        
     */
       
        
       
       // int *p=NULL;
        /*
        int a[10]={0};
    //int b[10]={0};
        p=a;
    //   p=b;
    //  a=b;   数组名是地址常量,里面的值不可以被改变
        
        printf("数组的大小:%lu ",sizeof(a)); //如果sizeof一个数组返回的大小是整个数组的大小
        printf("指针的大小:%lu ",sizeof(p)); //sizeof一个指针变量,返回的是这个指针变量的大小
        
        
        */
        
        //记住这几种方式 都可以直接取出数组中的某个指定的地址,即可输出其中的数
        /*int a[5]={1,2,3,4,5};
        p=a;
        
        p=a+2;
        p=&a[2];
        
        p=p+2;
        p=&p[2];
        
       */
        
     //重指向
       /* int a=0;
        int b=10;
        
        int *p=&a;
        //printf("%d ",*p);
        
        p=&b;
        printf("%d ",*p);
        
        */
        
        
       /*
        short a[4]={3,7,9,1};
        int  *p1=a;
        char  *p2=a;
       // printf ("p1=%d ",*p1);
        printf ("p2=%d",*(p2+4));
        
        */
       //指针和字符串的关系
        
        /*char a[]="你好我是字符串";
        a[18]='o';
        a[19]='';
        printf("%s ",a);
        
        
        char *str="字符串我来了";
       
        printf("%s",str);
        
        */
        
        
        
    //通过指针可以计算字符串的长度。提示:遇到’’表⽰示字符串结束。
       /* char str[]="iphone";
        char *p=str;
        int count =0;
        while(*p!='')
        {
            count ++;
            p++;     //p是地址  一直往后加
        
        }printf("%d个字符 ",count);
        */
    //两个指针相减 计算的结果是两个指针相隔多少元素
        /*
         int a[10]={0};
        int *r=a;
        int *p=a;
        
        p+=10;   //指针指向第十个元素
        long test =p-r;
        printf("%lu",test);
        */
        
    //指针数组
       /*
        char *str[]={"abc","def","ghi"};
        printf("%s",str[0]);//这就是指针数组  []里面的数字可以指定输出哪个字符串
        
        */
        
        
        /*
        int a=10;
        int *p=&a;    //这样就存放了a的地址
        */

    //指向指针的指针的定义
        /*
        int a=10;
        int *p=&a;
        int **r=&p;
        int ***c=&r;
        int ****d=&c;
        
        printf("%d",****d);  //输出d
        */
    //注:永远不要使用没有赋过地址的指针,因为你不确定这里面存着什么.
       //如 int *p;  这是没有指向的指针
        
    //使用指针交换两个数
       /*
        int a=10;
        int b=20;
        int *pa=&a;
        int *pb=&b;
        printf("a=%d,b=%d ",a,b);  //交换前
        change(pa,pb);
        printf("a=%d,b=%d   ",a,b);    //交换后
        
        */
        

  • 相关阅读:
    模板jinja2常用方法
    简单实用的日志类CLog (Python版)
    Databus架构分析与初步实践
    AWS API 2.0签名规范
    django学习——通过get_FOO_display 查找模型中的choice值
    Twitter如何在数千台服务器上快速部署代码?
    mysql 添加索引 mysql 如何创建索引
    sql中的like和正则的区别
    python2.7运行出现的Warning: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode
    Python命令模块argparse学习笔记(四)
  • 原文地址:https://www.cnblogs.com/-ios/p/4673066.html
Copyright © 2020-2023  润新知