一文弄懂指针类型!

一口Linux

    0.问题
    知乎上回答了一个粉丝问题,
    
    结果这兄弟又连续问了几个问题:
    
    好吧,帮人帮到底,送佛送到西!给你讲彻底点吧!
    1. int va;
    这是一个整型变量,32位CPU的话,占有32个bite
    2. int *va;
    这是一个整型指针变量,用于存放一个整型变量的地址,
    3. int **va;
    这是一个整型的二级指针,用于存放一个内存的地址,该地址对应的内存中存放了另一个整型变量的地址
    比如:
    int va=0x12345678; 
    int *pva = &va;
    int **ppva = &pva;
    
    4. int *va[3]
    这是一个数组,该数组里面的成员是整型的指针,分别指向int型的内存
    
    5. int (*va)[3]
    这是一个指针,指向一个int型数组
    注意,该地址类型是int [3]型,他的值是0x40004000,
    值为0x40004000的符号还有:
    a   &a[0]
    但是他俩的类型和va不一样,
    
    6. void *va(int)
    这是一个函数
    函数的参数是int,
    返回值是void *
    void (*va)(int)这是一个指针,指向一个函数,
    该函数形参是int
    返回值是void
    举例
    void (*va)(int);
    void func(int num)
    {
       printf("一口Linux %d",num);
    }
    va = func ;
    //调用
    main()
    {
       (*va)(6);
    }
    注意:函数名也是一个地址
    7. int (*va[3])(int)
    结合方式:
    
    va先和[3]结合,说明va是一个数组va[3] 外面*结合,所以数组元素是一个指针假定(*va[3])是X,外面是 int (X)(int),所以指针是指向函数的函数的形参是是int型,返回值是int型
    
    - END -