SQSH1616 12-15 C基础

2016-12-15  本文已影响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;
  //定义一个指针,或地址进行操作时,一定要确定指针的方向
上一篇下一篇

猜你喜欢

热点阅读