zoukankan      html  css  js  c++  java
  • 关于指针的总结—②未完待续

    ---恢复内容开始---

    指针的运算

    指针的本质就是个整数,因此从语法上来说整数能使用的运算符它都能使用。
    不是所有的运算符对指针运算都是有意义的。
    指针+整数 <=> 指针+宽度*整数 向右移动
    指针-整数 <=> 指针-宽度*整数 向左移动
    指针-指针 <=> 指针-指针/宽度 计算出两个指针之间相隔多少个元素。

    指针与const:
    const int* p; 保护指针指向的数据,不能通过指针解引用修改内存的值。
    int const *p; 保护指针指向的数据,不能通过指针解引用修改内训的值。
    int * const p; 保护指针变量,指针变量初始化之后不能再显式的赋值。
    const int *const p; 既不能修改指针的值,也不能修改内存的值。
    int const * const p; 既不能修改指针的值,也不能修改内存的值

    #include <stdio.h>
    
    int main()
    {
        const int num = 10;
        int const *p = &num;
        // *p = 100;
        int * const p1 = &num;
        *p1 = 100;
        p1 = NULL;
    }

    什么是二级指针

     A(即B的地址)是指向指针的指针,称为二级指针,用于存放二级指针的变量称为二级指针变量,

    二维指针:指向指针的指针,它是个指针变量,但它存储的是指针变量的地址。
    float * p = NULL;
    定义:float** pp = &p;
    使用:*pp <=> p; **p <=> *p;

    函数之间共享普通变量使用一级指针,共享指针变量需要使用二级指针。

    #include <stdio.h>
    #include <stdlib.h>
    
    void create_memory(void** p,int size)
    {
        *p = malloc(size);
    }
    
    int main()
    {
        int* p = NULL;
        create_memory(&p,40);
        printf("%p
    ",p);
        for(int i=0; i<10; i++)
        {
            printf("%d ",p[i]);
        }
    }

    函数指针:
    函数就是存储在代码段中的一段数据,当被调用时跳转到那个位置去执行,而函数名就是这段数据的首地址(函数指针),因此函数名就是个指针。
    程序员可以自己定义函数指针来指向函数:
    1、写出函数的声明
    2、为函数名添加小括号
    3、修改函数名,并在函数名前加*

    定义好函数指针后就可以指向函数了,通过()就可以调用函数,而不用*解引用。
    函数指针真正的作是可以把函数当作参数在函数之间进行传递,然后达到一效果:多年前写的代码来调用现在所定的代码,这种模式叫回调。

    指针数组:由指针变量构成的数组。
    定义:char* arr[5]; // 定义一个长度为5的数组,成员类型是char*
    相当于定义的5个 char* 指针变量,char *p1,*p2,*p3,*p4,*p5;
    使用:arr[0] = "hehe"; printf("%s ",arr[i]);
    sizeof(arr) => 20个字节

    数组指针:专门用来指向数组的指针。
    int arr[10];
    定义:int (*p)[10] = NULL;
    p + 1 => 40;
    更多时候用来指向二维数组,当使用二维数组当函数参数时,应该使用数组指针来当形参。
    C语言中没有真正的二维数组,是用一维数组模拟的。

  • 相关阅读:
    Linux LCD驱动(四)--驱动的实现
    Linux LCD驱动(三)--图形显示
    s3c2440的LCD字符显示
    Linux framebuffer显示bmp图片
    Linux Framebuffer编程简介
    linux 2440 LCD 应用程序编程
    嵌入式Linux下S3C2410的调色板彩色显示
    l​i​n​u​x​下​L​C​D​(​f​r​a​m​e​b​u​f​f​e​r​)​驱​动​分​析
    我的基本信息
    unity生命周期
  • 原文地址:https://www.cnblogs.com/kid971220/p/10188863.html
Copyright © 2011-2022 走看看