• 预编译宏定义


    总结:
    1.结构体指针如何人访问成员
    2.结构体数组与指针如何访问某个元素的成员
    3.条件编译如何进行条件编译
    #import <Foundation/Foundation.h>
    //预编译
    //宏定义
    #define PI 3.1415926//#define 的第一种形式
    #define S(a,b) (a*b)//#define 的第二种形式
    //注意:1推荐用大写 驼峰命名法 k+PI 或 PI
    //    2宏不是变量
    //pragma
    #pragma mark add函数
    void add (int a,int b){
    }
    #pragma mark sayHi函数
    void sayHi(){
    }
    #pragma mark main 函数
    //条件编译
    //条件编译的第一种形式
    #ifdef PI
    int a = 10;
    #else
    int a = 20;
    #endif
    //条件编译的第二种形式
    #ifndef wangnima
    //没有定义宏定义过,执行代码段一
    int b = 30;
    #else
    int b = 40;
    #endif
    //条件编译的第三种形式
    #if 1
    int c = 50;
    #else
    int c = 60;
    #endif
    int main(int argc, const char * argv[]) {
        printf("%d ",a);
        printf("%d ",b);
        printf("%d ",c);
        return 0;
    }
    #import <Foundation/Foundation.h>
    typedef struct CPoint{
        float X;
        float y;
    }CPoint;
    typedef struct student{
        char name[20];
        char gender;
        float score;
    }Student;

    typedef struct person{
        char name[20];
        int age;
    }person;
    //打印person的name
    void printName(person p){
        printf("%s ",p.name);
    }
    //打印数组的成员的name
    void printArrName(person arr[],int n){//(person *arr[],int n)
        for (int i = 0; i < n; i++) {
            printf("%s ",(arr + i)->name);
        }
    }
    void scoreName(Student arr[],int n){
        Student *p = arr;
        for (int i = 0; i < n; i++) {
            if ((p+i)->gender == 'm') {
                (p+i)->score += 10;
                if ((p+i)->score > 100) {
                    (p+i)->score = 100;
                }
            }
        }
        for (int i = 0; i < n; i++) {
            printf("%s %c % f ",(p+i)->name,(p+i)->gender,(p+i)->score);
        }
    }
    void ScoreName(Student *p,int n){
        for (int i = 0; i < n; i++) {
            if ((p+i)->gender == 'm') {
                (p+i)->score += 10;
                if ((p+i)->score > 100) {
                    (p+i)->score = 100;
                }
            }
        }
        for (int i = 0; i < n; i++) {
            printf("%s %c % f ",(p+i)->name,(p+i)->gender,(p+i)->score);
        }
    }
    int main(int argc, const char * argv[]) {
     Student students[4] = {{"tangmaru",'m',91},{"wangnima",'m',96},{"ruhua",'f',80},{"zhangquandan",'m',90}};
     Student *ps = students;
    for (int i = 0; i < 4; i++) {
    if ((ps+i)->gender == 'm') {
    (ps+i)->score += 10;
    if ((ps+i)->score > 100) {
    (ps+i)->score = 100;
    } } }
    for (int j = 0; j < 4; j++) {
    printf("%s %c %.2f ",(ps+j)->name,(ps+j)->gender,(ps+j)->score);}
    Student students[4] = {{"liubei",'m',98},{"zhangfei",'m',97},{"gaunyu",'m',98},{"zhaoyun",'m',99}};
        scoreName(students, 4);
        ScoreName(students, 4);
    //    person p1 = {"wangnima",16};
    //    person p2 = {"tangmaru",18};
    //    person p3 = {"ruhua",20};
    //    person arr[3] = {p1,p1,p3};
    //    printArrName(arr,3);
    //    printName(p1);
        //函数操作结构体数组时需要传入两个参数
        //1数组元素的首地址(结构体数组名)2结构体数组元素的个数
        //结构体指针 
    //    CPoint arr = {10,20};
    //    CPoint *p1= &arr;
    //    p1 = &arr;
    //   // arr.X 用点取出结构体变量的成员变量
    //    printf("%.2f ",(*p1).X);
        //指针取结构体变量的成员变量 用*取值,然后再.
        //练习:定义一个学生的结构体,里面有两个成员变量 1 姓名 2 年龄 用指针打印成员变量
    //    Student student = {"袁新峰",78};
    //    Student student1 = {"刘振艺",18};
    //    Student student2 = {"王明伟",17};
    //    Student student3 = {"赵成浩",16};
    //    Student *ps = &student,*ps1 = &student1,*ps2 = &student2,*ps3 = &student3;
    //    ps = &student;
    //    ps1 = &student1;
    //    ps2 = &student2;
    //    ps3 = &student3;
    //    printf("%s %d ",(*ps).name,(*ps).age);
    //    printf("%s %d ",(*ps1).name,(*ps1).age);
    //    printf("%s %d ",(*ps2).name,(*ps2).age);
    //    printf("%s %d ",(*ps3).name,(*ps3).age);
    //    printf("%s %d ",ps->name,ps->age);
        //结构体指针访问成员变量,还可以用箭头这个符号
    //    CPoint num1 = {10,30};
    //    CPoint num2 = {10,5};
    //    CPoint *pn1 = &num1;
    //    CPoint *pn2 = &num2;
    //    pn1 = &num1;
    //    pn2 = &num2;
    //    float num = 0;
    //    num = sqrtf(((pn1->X-pn2->X)*(pn1->X-pn2->X))+((pn1->y-pn2->y)*(pn1->y-pn2->y)));
    //    printf("%.2f ",num);
    //    Student stu = {1, "lan ou",'m',89};
    //    Student *ps = &stu;
    //    ps = &stu;
    ////    ps->name[0] -= 32;
    //      ps->name[0] ^= 32;//大小写互相转换用^=32
    ////    ps->name[0]= 'L';
    ////    char a1 = ps->name[0] - 32;
    ////    ps->name[0] = a1;
    //    printf("%s ",ps->name);
    //    //结构体数组数组名就是数组首元素的地址 也就是这个结构体数组的指针
    //    Student students[5] = {{1, "lan ou",'m',89},{2, "lan ou",'m',89},{3, "lan ou",'m',89},{4, "lan ou",'m',89},{5, "lan ou",'m',89}};
    //    Student *pst = students;
    //    students[0]->number;
    //    pst->number;
    //    printf("%d ",pst->number);
    //    printf("%d ",(pst+1)->number);
    //    printf("%d ",(pst+2)->number);
    //    printf("%d ",(pst+3)->number);
    //    printf("%d ",(*(pst+4)).number);
    //    printf("%d ",(*pst).number);
    //    //*(p+i)等价于p[i]
    //    for (int i = 0; i < 5; i++) {
    //    printf("%d %s %c %f ",(pst+i)->number,(pst+i)->name,(pst+i)->gender,(pst+i)->score);
    //    }
    //    printf("%c ",pst->name[1]);
    //    //结构体指针也是一个指针,他所占字节只与操作系统有关
    //    //64位系统占8个字节 32位系统占4个字节
    //    printf("%lu ",sizeof(pst));
  • 相关阅读:
    array、vector、forward-list、list、deque的扩容,栈与队列,基于范围的for循环
    带默认参数值的函数
    :: 访问全局变量
    using来定义类的别名,typedef,#define
    const int* p
    内存
    变量的定义,强制类型转换
    HTTP请求流程(一)----流程简介
    DIY一个DNS查询器:程序实现
    详解C/C++函数指针声明
  • 原文地址:https://www.cnblogs.com/sharkHZ/p/4984219.html
Copyright © 2020-2023  润新知