• IOS学习之路-- 指针&宏函数


    • 如果*p被()包住,说明指针变量p将来指向的是函数
     //声明一个指针变量
        //int (*p)(int, int) = sum;
        int (*p)(int, int);
        p = sum;
        
        // 如果*p被()包住,说明指针变量p将来指向的是函数
        
        // 最左边的void说明p指向的函数没有返回值
        // 最右边的()说明p指向的函数没有形参
        void (*p)();
        
        // 函数名test就是test函数的地址
        // 将test函数的地址赋值给了指针变量p
        // 指针变量p成功指向了test函数
        p = test;
        
        // 利用指针变量p间接调用了test函数
        //(*p)();
        
        //test();
        p();
    • 结构体占用的空间大小

    默认情况下,一个结构体变量所占有的存储空间是所有成员的总和。

    sizeof计算的结构体所占用存储空间时,返回的值必须是最大成员的倍数。

    •  结构体的省略写法

      省略了结构体的名称,这种方法没有重用性。

      在结构图的最后加入的内容是  同时定义的变量。

        struct
        {
            double width;
            double height;
        } s;

      注意: 如果想给结构体使用{}的方式一次性赋值,只能在定义变量的同事进行。

    •  结构体作为函数参数时,只是成员的值传递(修改函数内部的结构体,并不影响外面的结构体)
    struct Person {
        int age;
    };
    
    
    // 这种方式是值传递, 不会真的改变nochange的值
    void changePersonWithAge1(struct Person nochange) {
        nochange.age = 100;
    }
    
    // 这种传递的是指针,指针指向同一个内容,可以真正改变
    void changePersonWithAge2(struct Person *change) {
    //    (*change).age = 100;
        change->age = 100;  // 等价于上面那行。
    }
    
    int main()
    {
        struct Person p1 = {5};
    //    changePersonWithAge1(p1);
        changePersonWithAge2(&p1);  // 引用传递,要传递指针
        
        printf("%d
    ", p1.age);
    
    }
    •  宏定义:

      #define 宏名 值

      #undef 宏名  

      作用:宏替换,在翻译之前,将代码中的所有宏名都替换成对应的值。

      宏名最好都用大写,跟函数区分开。可以使用在任何地方(代码段中,头部,任何地方)

    // 带参数的宏定义
    // 宏替换只是纯粹的文本替换,把左边的宏换成右边的东西,并不会进行任何运算
    // 参数和结构都必须用()包住
    #define PING_FANG(x)  ((x)*(x))
    •  预处理指令

        不能递归包含: 自己包含自己,a.h include a.h

        不能交叉包含:a.h incldue b.h, b.h include a.h

        防止.h的文件内容被包含多次。用预处理命令。  文件名用A_H的方式来定义。

     #ifndef 文件名
     #define 文件名
     
     ..文件内容..
     
     #endif
    •  typedef 起别名  

      typedef int Myint

      typedef char * String1 

    struct Person {
        int age;
    };
    
    // 给结构体类型起个别名 :Stu
    typedef struct Person Student;
    
    // 此结构类似与上面的内容。 是上面两行的缩写
    typedef struct Dog {
        int age
    } WangCai;
    •  指针的使用范围

      需要间接的修改某个变量的值。

  • 相关阅读:
    设置eclipse控制台上的信息输入到某个文件
    [HTML]去除li前面的小黑点,和ul、LI部分属性[转]
    fscanf函数的应用
    VC++中编译C出错:error C2143: syntax error : missing ';' before 'type'
    eclipse console输出有长度限制
    jstl之核心标签
    vmware esxi 6.0 开启嵌套虚拟化
    Proxmox如何进入单人维护模式(重置root密码)
    jstl错误排除:According to TLD or attribute directive in tag file, attribute value does not accept any expressions
    EL表达式
  • 原文地址:https://www.cnblogs.com/xitang/p/3835443.html
Copyright © 2020-2023  润新知