首页 > 代码库 > iOS学习笔记---c语言第九天
iOS学习笔记---c语言第九天
高级指针
指向结构体变量的指针,称为结构体指针
可以使用->指向内容。
%p打印地址
void pLenth(cPoint *p1,cPoint *p2)
//求两点间的距离 用的开方函数sqrt()和平方函数pow(,)
{
float a = sqrt(pow((p1->x-p2->x), 2)+pow((p1->y-p2->y), 2));
printf("两点距离为%.2f\n",a);
}
//main.m中代码#import <Foundation/Foundation.h>#import "Lesson.h"#import "Cpoint.h"int main(int argc, const char * argv[]){ Student stu = {"xiao wang tou",18,32,‘m‘}; Student *p = &stu; p->name[0] -= 32;//找到name第一个元素变大写 printf("%s\n",p->name); //循环把空格字符变下划线 for (int i = 0; i<strlen(p->name); i++) { if (p->name[i]==‘ ‘) { p->name[i]=‘_‘; } } printf("%s",p->name);// strcpy((*p).name, "xiaoliu");// strcpy(p->name, "hello");// printf("%lu %lu %s\nr",sizeof(stu),sizeof(p),(*p).name);// printf("%p %p",&(p->name),p);// Cpoint point1 = {1.25,2.36};// Cpoint *q = &point1;// printf("%.2f %.2f\n",q->x,q->y);//两种形式// printf("%.2f %.2f",(*q).x,(*q).y);// Cpoint point2[]={{5,6},{8,10}};// Cpoint *r = point2;// float num=sqrt((r->x-(r+1)->x)*(r->x-(r+1)->x)+(r->y-(r+1)->y)*(r->y-(r+1)->y));// printf("%.2f",num);// mysqrt(point2); return 0;}//Cpoint.h中代码typedef struct cpoint{ float x; float y;}Cpoint;void mysqrt(Cpoint point2[]);//Cpoint.m中代码#import "Cpoint.h"void mysqrt(Cpoint point2[]){ Cpoint *r = point2; float num=sqrt((r->x-(r+1)->x)*(r->x-(r+1)->x)+(r->y-(r+1)->y)*(r->y-(r+1)->y)); printf("%.2f",num);}//Lesson.h中代码//创建一个学生的结构体typedef struct student{ char name[20];//姓名 int num; //学号 int age; //年龄 char sex; //性别}Student;
结构体数组。
stu stus[3] = {0};
stu *p = &stus;
*(p+1).num 第二个学生的num
找出性别为男的学生,成绩加10,超过100写100
在student结构体中加score成员
//Lesson.h文件typedef struct student{ char name[20];//姓名 int num; //学号 int age; //年龄 char sex; //性别 float score; //分数}Student;void manscore(Student *stud,int count);//Lesson.m文件//性别为男的学生成绩加10,如果超过100,成绩为100void manscore(Student *stud,int count){ for (int i=0; i<count; i++) { if ((stud+i)->sex==‘m‘) { (stud+i)->score+=10; if ((stud+i)->score>=100) { (stud+i)->score=100; } } printf("%.2f ",(stud+i)->score); }}//主函数 Student arr[3]={{"xiaoming",1,18,‘m‘,95},{"xiaobai",2,20,‘f‘,90},{"xiaoxiao",3,19,‘m‘,56}}; Student *p = arr;// for (int i=0; i<3; i++) {// if ((p+i)->sex==‘m‘) {// (p+i)->score+=10;// if ((p+i)->score>=100) {// (p+i)->score=100;// }// }// // printf("%.2f ",(p+i)->score);// } manscore(p, 3);
三、预编译指令
宏定义 实际开发中用的比较多
预编译时进行替换(编译前)
宏名命名规则: 纯大写 或者 k+驼峰
#define kMax 100
eg:MAX 或者 kMax
宏是符号常量不是变量 制作替换不做语法检查 后面没有分号;
带参数的宏
#define MUL(A,B) ((A)*(B))
#define kSum(A,B) A*Bint main(int argc, const char * argv[]){ int a = kSum(3+5,6-3);//3+5*6-3 printf("%d",a);//输出30
条件编译
作用:按不同的条件,编译不同的代码。
条件编译 有三种形式
1.#ifdef 标识符
代码段1
#else
代码段2
#enfif
//如果定义了宏AAA#ifdef AAA printf("这段代码被编译");#else printf("这段代码才被编译");#endif//编译结束以#endif结束
2.#ifndef 标识符
代码段1
#else
代码段2
#endif
3.#if 常量表达式
代码段1
#else
代码段2
#endif
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。