美文网首页
SQSH1616 12-15 C基础

SQSH1616 12-15 C基础

作者: 彳亍的心 | 来源:发表于2016-12-15 19:22 被阅读0次

    一.数组

    1.二维数组

    行可以省略,列不可以省略
    

    2.指针

    (1)指针类型是一种特殊类型

          DataType *name;
          DataType* name;
          DataType * name;
          DataType :数据类型
          name:变量名
          指针和普通变量的区别;
               指针:存地址
               普通变量:存值
          指针只能保存与其相同类型的地址
          int *p;只能保存int型地址
          char *pc:只能保存double型地址
          double *pc:只能保存double型地址
    

    (2)初始化

            int *p = NULL;//ok
            //NULL:表示空地址,是一个宏
            int a = 3;
            int *pa =&a;//ok
            
            int *pb;
            pb = &a;//ok
            
            int *pc;
            *pc = &a//error
            //adress
            printf("&num = %p\n",&num);
            printf("pb = %p\n",pb);
            //元素的访问
            printf("num = %d\n",num);
            //*pb是值,不是地址,pb是地址
            printf("*pb = %d\n",*pb);
    

    (3)地址的访问

          *:间接访问运算符
          int a = 10;
          int *pb;
          pb = &a;    //ok
          变量名    变量地址     存储
          a          0x00012     10
          pb         ox00034      0x00012
          *pb:取指针对应内存里的值
    

    (4)可以把指针赋值给同类型指针

    (5)不同类型指针的大小

        64位机:  8
        32位机:  4
    

    (6)指针类型和指针所指向的类型

       int *pa;
       double *pb;
       指针的类型:int *,double *,即去掉变量名之后的部分。
       指针所指向的类型:int,double,即去掉指针变量名和其前面的*。
    

    (7)指针与数组

         数组名是一个地址,
         数组元素的访问
         int arr[5] = {1,2,3,4,5};
         int *pa = arr;
         
         arr[0];     arr[3];
         *(arr);    *(arr+3);
         *pa   ;    *(pa+3);
         pa[0] ;    pa[3]; 
    

    (8)野指针

           没有初始化,或者其指向的内存被释放,而指针没有被置空;
      危害:
            造成系统资源浪费,容易造成未知的知名错误
    

    (9)指针地址的运算

            指针的自增和自减
            自增:指针向高地址方向移动
            自减:指针向低地址方向移动
               移动的字节数是指针所指向的类型的大小
            注:指针相减,表示两指针的距离,相加无意义
        指针加减一个常量表示地址往高字节或地字节方向移动
        常量值*sizeof(对应数据类型)个字节!
    

    (10)概念区分

        int arr[3];
        //数组,大小为3,存放三个int变量
        int *pb;
        //指针,其类型为int *型
        int *arr[3];
        //指针数组
        int (*pa)[3];
        //数组指针,又称行指数
    

    2.二级指针

      DataType **PointorName;
      int a = 10;
      int *q = &a;
      int **p =&q;
      *p=a;
      **p=*q=a
      
      int **p;
      //定义一个指针,或地址进行操作时,一定要确定指针的方向

    相关文章

      网友评论

          本文标题:SQSH1616 12-15 C基础

          本文链接:https://www.haomeiwen.com/subject/rhugmttx.html