首页 > 代码库 > 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