我的iOS学习历程 - 第九天
#import <Foundation/Foundation.h>
今天主要讲的是高级指针
typedefstruct LStudent{
int number;
char name[50];
char sex;
float score;
}LStudent;
void Change(LStudent *p);
//********************************************
typedefstruct Student {
char name[50];
char sex;
int age;
float score;
}Student;
void printfMessage(Student *p);
//********************************************
typedefstruct CPoint {
float x;
float y;
}CPoint;
void Distance(CPoint *p1,CPoint *p2);
void pStudent(Student *p,int count);
void PlusSudent(Student *p,int count);
//********************************************
#import "Function.h"
void printfMessage(Student *p){
printf("%s ",p->name);
printf("%c ",p->sex);
printf("%d ",p->age);
printf("%.2f\n",p->score);
}
//********************************************
void Distance(CPoint *p1,CPoint *p2){
printf("dis = %f",fabsf(sqrtf((p1->x - p2->x) * (p1->x - p2->x) + (p1->y - p2->y) * (p1->y - p2->y))));
}
//********************************************
void Change(LStudent *p){
p->name[0] = p->name[0] - 32 ;
int n =0;
while ( p->name[n] !='\0') {
if (p->name[n] ==' ') {
p->name[n] ='_';
}
n++;
}
#import <Foundation/Foundation.h>
#import "Function.h"
// 宏定义
#define WL 1
#define kMaxValue(A,B) ((A) > (B) ? (A) : (B))
// 命名规范:
// 1.以小写k开头后面驼峰 编写宏定义
// 2.所有字母全大写
// 计算两个数的最小值
// 一般宏定义的参数都是以大写来写
#define kMinValue(A,B) ((A) < (B) ? (A) : (B))
// 带参数的宏定义:替换的过程
// 带参数的宏定义:参数使用什么名字 后面使用参数的时候名字要一致
#define PI 3.14
主函数
int main(int argc,const char * argv[]) {
判断宏定义之前有没有定义过
#ifdef WL
printf("这个宏定义已经定义了");
#else
printf("这个宏定义没有定义");
#endif
********************************************
#ifdef PI
// 计算圆面积
#define AERS(R) PI * (R) * (R)
#else
#define AERS(R) 3.14 * (R) * (R)
#endif
********************************************
#ifndef PI
// 跟第一种形式正好相反
#define AERS(R) 3.14 * (R) * (R)
#else
#define AERS(R) PI * (R) * (R)
#endif
//********************************************
#if 1
printf("真的就执行这里");
#else
printf("假的就执行这里");
#endif
//********************************************
int a =3;
int b =4;
int max =kMaxValue(a, b);
int min =kMinValue(a, b);
printf("%d\n",min);
需求:
1.创建一个学生类
2.声明一个结构体成员变量 名字性别 年龄分数
3.在主函数中声明一个结构体变量
Student stu1 = {"Allen",'m', 18,82.3};
Student *p = &stu1;
printf("%s\n",stu1.name);
(*p).name
*p取出指针所指向的位置保存的值
printf("%s\n",(*p).name);
结构体指针中 经常使用 -> 指向符
printf("%s\n",p->name);
需求 :编写函数 打印所有的成员变量
printfMessage(p);
printf("%p\n",p);
printf("%p\n",&stu1);
printf("%p\n",&stu1.name);
printf("%p\n",&stu1.sex);
结构体指针指向结构体变量 就相当于指向结构体变量第一个 成员变量
定义⼀个点坐标的结构体CPoint,包含两个float成员x,y。定义两个CPoint结构体变量m,n,使⽤两个结构体指针分别指向m,n,然后通过指针计算两点距离(提⽰:1、勾股定理,2、开⽅函数sqrt)
CPoint m = {0,0};
CPoint n = {4,3};
CPoint *p1 = &m;
CPoint *p2 = &n;
Distance(p1, p2);
student stu = {1,”lan ou”,’m’,95.6}; student * p = &stu;请通过p将name成员中的第⼀个字⺟改成⼤写,所有’ ‘(空格)改成下划线’_’
LStudent stu = {1,"lan ou",'m',95.6};
LStudent *p = &stu;
Change(p);
printf("%s",p->name);
声明三个学生结构体变量
声明一个结构体数组保存三个学生
Student stu1 = {"Paul",'m', 17,88.8};
Student stu2 = {"James",'m', 18,92.8};
Student stu3 = {"Ivring",'w', 19,84.8};
结构体指针地址+1相当于加了一个该结构整个的字节数 (按最大字节补齐)
声明一个结构体数组保存三个学生
Student stus[3] = {stu1, stu2, stu3};
Student *p = stus;
printf("%p",p);
结构体指针指向 结构体数组相当于 指向结构体数组的首元素
printf("%p",&stus[0]);
如何利用指针取出数组中的元素
printf("%c",(*(p +1)).sex);
printf("%c",(p +1)->sex);// 推荐!
编写函数利用指针打印结构体数组的每一个学生
pStudent(p, 3);
使⽤指针查找学员数组中性别为男的学员,成绩增加10分,超过100分的记为100分
PlusSudent(p, 3);
return0;
}
浙公网安备 33010602011771号