Student.h文件:
#import <Foundation/Foundation.h>
struct student{
char name[20];
char gender[10];
int age;
float score;
};
typedef struct student Student;
void printfStudent(Student *stu);
//转首字母大写 空格变下划线
void changeStudent(Student *p);
void printfAllStudent(Student *p,int count);
// 使用指针查找学员数组中性别为男的学员,成绩增加10分,超过100分的记为100分)
void searchStudent(Student *p,int count);
Student.m
#import "Student.h"
void printfStudent(Student *p){
printf("%s %s %d %.1f\n", p->name, p->gender, p->age, p->score);
}
void changeStudent(Student *p){
// 利用ASCII表 转换大小写
p->name[0] = p->name[0] -32;
// 空格转下划线
int i = 0;
while (p->name[i] !='\0') {
if (p->name[i] ==' ') {
p->name[i] ='_';
}
i++;
}
// 嵌套调用
printfStudent(p);
}
void printfAllStudent(Student *p,int count){
for (int i =0; i < count; i++) {
//嵌套调用 打印单个学生信息的函数
printfStudent(p + i);
}
}
void searchStudent(Student *p,int count){
for (int i =0; i < count; i++) {
if (strcmp((p + i)->gender,"男") ==0) {
(p + i)->score +=10;
if ((p + i)->score >100) {
(p + i)->score =100;
}
}
}
printfAllStudent(p,3);
}
main.m文件:
#import <Foundation/Foundation.h>
#import "Student.h"
// 1.创建一个学生类
// 2.声明一个结构体成员变量 名字性别 年龄分数
// 3.再主函数中声明一个结构体变量
#define PI 3.14;
// 带参数的宏定义: 替换的过程
// 命名规范: 1.以小写k开头后面驼峰 编写宏定义
// 2.全部大写
// 参数使用什么名字后面使用参数的时候 名字要一致
#define kMaxValue(A, B) ((A) > (B) ? (A) : (B))
// 计算两个数的最小值
// 一般宏定义的参数都是以大写来写
#define kMinValue(A, B) (A) > (B) ? (B) : (A)
int main(int argc,const char * argv[]) {
//判断 宏定义之前有没有定义过
#ifdef PI
#define ARES(R) PI * (R) * (R)
#else
#define ARES(R) 3.14 * (R) * (R)
#endif
#ifndef PI
printf("这个PI没定义过\n");
#else
printf("这个PI定义过\n");
#endif
#if 1
printf("真的就执行这里\n");
#else
printf("假的就执行这里\n");
#endif
int a = 3, b =5;
int max = kMaxValue(a, b);
printf("max = %d\n",max );
Student stu1 = {"lan ou 12","女",23, 88};
//结构体指针 指向结构体的指针
Student *p = &stu1;
printf("%s\n", stu1.name);
// *p取出指针所指向的空间保存的值
printf("%s\n", (*p).name);
//结构体指针中经常使用 -> 指向符
printf("%s\n", p->name);
//编写函数打印所有的成员变量
printfStudent(p);
printf("%p\n", p);
printf("%p\n", p->name);
//结构体指针指向结构体变量 就相当于指向结构体变量第一个 成员变量
changeStudent(p);
//声明3个学生结构体变量
//声明一个结构体数组 保存三个学生
Student stu2 = {"dajun","女",23, 89};
Student stu3 = {"mtt","女",24, 66};
Student stu4 = {"cqq","男",25, 93};
Student stu[3] = {stu2, stu3, stu4};
//结构体指针 地址加1相当于 加了一个整个的结构体的字节数
Student *sp1 = stu;
//结构体指针 指向结构体数组 就相当于指向结构体数组的首元素
printf("%p\n", sp1);
printf("%p\n", &stu[0]);
//如何利用指针 取出结构体数组中的元素
printfStudent(sp1 + 1);
printf("%s\n",(*(sp1 +1)).name);
printf("%s\n",(sp1 +1)->name);
//编写函数 利用指针打印结构体数组的每一个学生
printfAllStudent(sp1,3);
searchStudent(sp1,3);
return 0;
}