12.15C基础数组和指针的学习

笔记:

一 数组

1.二维数组
    行数可以省略,列不可省略!!!
2.指针
    (1)指针类型是一种特殊类型
            DataType *name;
            DataType* name;
            DataType * name;
            DataType:数据类型
           
            name:变量名
            指针和普通变量的区别:
                    指针   :存地址
                    普通变量:   存值                              

            指针只能保存与其相同类型的地址                                                 
            int *p:只能保存int型地址
            char *pc:只能保存char型地址
            double *pd:只能保存double型地址                
            
    (2)初始化
            int *p = NULL;  //OK
            
            int a = 3;
            int *pa = &a;   //OK
            
            int *pb;
            pb = &a;                //OK
            
            int *pc;
            *pc = &a;               //error
    (3)地址的访问
            *:间接访问运算符
            int a = 10;
            int *pb;
            pb = &a;                //OK
            
            变量名  变量地址          存储
            a     0x000012     10
            pb    0x000034     0x000012     
            
            *pb:取指针对应内存里面的值
    (4)可以把指针变量赋值给同类型指针
    (5)不同类型的指针的大小
            64位机:    8
            32位机:    4              
    (6)指针的类型和指针所指向的类型
            int *pa;
                    int* pa;
            double *pd;
            指针的类型:
                    去掉变量名之后的部分
            指针所指向的类型:
                    去掉指针变量名和其前面的*
            
    (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 buf[3];
                    //数组,大小为3,存放三个int型变量            
            int *pb;
                    //指针,其类型为int *型
            
            int *arr[3];
                    //指针数组
            
            int (*pa)[3]; 
                    //数组指针,又称行指针
                    int (*)[]  pa;

            int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}};
            <====>
            arr[3] = {a[3],a[3],a[3]};
            1  2  3
            4  5  6
            7  8  9

2.二级指针

    DataType **PointorName;
    
    int a = 10;
    int *q = &a;
    int **p = &q;
    
    *p = q;
    **p = *q = a;   



    //定义一个指针,或对地址进行操作时,一定要确定指针的指向
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 8,811评论 3 44
  • 前言 最近真的是忙的不可开交,公司一直给安排任务,连学习和写笔记的时间都没有了,落下好几次课的笔记都没有写,所以我...
    Xiho丶阅读 5,404评论 1 12
  • 1、二级地址与一级地址是完全不同的两种地址。二级指针变量与一级指针变量也是完全不同的两种指针变量,二者决不能互换使...
    滕王阁序阅读 3,126评论 0 1
  • 刘殊选为秘书长,选为会长
    萝卜树阅读 793评论 0 0
  • 阳光洒进窗台 只要冬日有暖阳 就觉得无比美好 空气凉凉的 阳光柔和的 照在脸上 落进心里 没有理由觉得日子不美好 ...
    琴子曰阅读 1,443评论 0 0