一 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;
}
网友评论