6.结构体相关

一 C 结构体和结构体指针

eg1:

struct Student {
    char *name; //姓名
    int num; //学号
    int age; //年龄
    float score; //成绩
};

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //网络不一定是个好东西。垃圾太多。
        
        //结构体:通过 . 访问成员变量
        struct Student stu1;
        stu1.name = "RiLeGouLe";
        stu1.age = 10;
        stu1.num = 1001;
        stu1.score = 90.0;
        NSLog(@"%s %d %d %.2f",stu1.name,stu1.age,stu1.num,stu1.score);
        
        //结构体指针: 通过 -> 访问成员变量
        struct Student *stu2 = &stu1;
        NSLog(@"%s %d %d %.2f",stu2->name,stu2->age,stu2->num,stu2->score);
    }
    return 0;
}

一 结构体里面定义函数

通过结构体指针访问结构体里面定义的函数。

struct Hello {
    void(*sayHello)(char *name);
};
void sayHello(char *name) {
    printf("%s你好,该学点东西了!\n",name);
}

int main() {
    struct Hello *hello1 = (struct Hello *)malloc(sizeof(struct Hello));
    
    hello1->sayHello = sayHello;
    hello1->sayHello("张三");
    hello1->sayHello("李四");
    return 0;
}

eg2:

//https://blog.csdn.net/SYQ_aa/article/details/77430345

//结构体指针
//结构体指针调用函数
//typedef 结构体指针。
struct Book {
    char name[30];
    char author[20];
};

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        
        //定义一个结构体数组: 类型是: struct Book
        struct Book bookArr[2] = {{"码农翻身","刘欣"},{"三国演义","罗贯中"}};
        
        //定义一个结构体指针
        struct Book *bp = nil;
        
        for(bp = bookArr; bp < bookArr+2;bp++) {
            printf("Book name :%s author: %s\n",bp->name,bp->author);
        }
    }

//常识性的东西: 这个知识点在看block底层原理.category底层院里的时候特变有用。使用clang转为C++代码后.就是一堆结构体,结构体指针,函数指针。

/**
1.数组首地址
数组名就是数组首地址
数组的第一个元素的地址就是数组的首地址
*/

/**
2.结构体的地址
类比数组--->结构体的地址就是结构体第一个元素的地址。
*/
   //重新让bp指向 数组首地址
        bp = bookArr; // bp = &bookArr[0];
        
        printf("%p--%p\n",bookArr,&bookArr[0]); //0x7ffeefbff560--0x7ffeefbff560
        printf("%p--%p\n",bp,bp->name); //0x7ffeefbff560--0x7ffeefbff560
    return 0;
}

你可能感兴趣的:(6.结构体相关)