美文网首页
培训第八天----指针

培训第八天----指针

作者: 穹蓝奥义 | 来源:发表于2016-12-15 18:39 被阅读0次

    昨日回顾

    if...else
    数组:不允许越界访问。
    练习:
    1.在数组中插入一个数据。
    2.寻找素数并保存到数组中。
    3.将数组倒置。

    ===================

    一、数组

    (1)二维数组

    ** 行数可以省略,列数不可省。**

    二、指针

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

    Datatype *name;    //一般使用形式。
    Datatype* name;    //底层代码使用较多。
    Datatype * name;
    

    *:表示这是一个指针变量。
    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;       //不允许!!
    

    (3)地址的访问

    *:间接访问运算符。

    如:

    int a = 10;
    int *pb;
    pb = &a;      //OK
    

    例:

    变量名     变量地址     值
    a        0x000012   10
    pb      0x000089    0x000012
    

    *pb:取指针对应内存里的值。

    (4)可把指针变量赋值给同类型指针。

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

    32位机下指针大小为4。
    64位机下指针大小为8。

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

    例:

    int *pa;
    int* pa;
    double *pb;
    

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

    (7)指针与数组

    数组名是个地址。
    数组元素的访问:

    int arr[5] = {0,1,2,3,4};
    int *p =arr;
    

    例:

    arr[0];  arr[3];
    *(arr);  *(arr+3);
    *(p);    *(p+3);        //数组名也可以理解为一个指针
    p[0];    p[3];
    

    (8)野指针

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

    (9)指针地址的运算

    指针的自增和自减
    自增:向指针的高地址方向移动。
    自减:向指针的低地址方向移动。
    指针可互减,负号代表方向,表示两指针之间的距离,低地址与高地址间的字节的距离。
    指针相加没有意义。
    常量值×sizeof(对应数据类型)个字节!

    (10)概念区分

    例:

    int buf[3]; //数组,大小为3,存放三个int型变量。
    int *pa;       //指针,其类型为int *型。
    int *arr[3];   //指针数组;优先级看arr先和[]结合。数组里存着3个指针或地址。
    int *(pa)[3];  //数组指针,又称行指针;指针里存数组的地址。
    int (*)[3] pa; //上式的另一种形式,更好理解,数据类型定义一个变量。
    

    又例:

    int arr[3][3] = {{11,12,13},{21,22,23}.{31,32,33}};
    <===>  arr[3]  = {arr[3](1),arr[3](2),arr[3](3)}
    

    矩阵为

        11  12  13
        21  22  23
        31  32  33
    

    三、二级指针

    格式

    Datatype **PointorName; 
    

    例:

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

    注:

    *p = q;
    **p = *q = a;
    

    定义一个指针,或对地址进行操作时,一定要确定指针的指向。

    排版耗时25分钟。
    疑问上课已提出,并解决。

    相关文章

      网友评论

          本文标题:培训第八天----指针

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