您的位置:首页 > 编程语言 > C语言/C++

iOS学习笔记---c语言第九天

2014-06-18 11:49 567 查看
[b]高级指针[/b]

指向结构体变量的指针,称为结构体指针

可以使用->指向内容。

%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,成绩为100
void 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*B

int 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

#endif

//如果定义了宏AAA
#ifdef AAA
printf("这段代码被编译");
#else
printf("这段代码才被编译");
#endif//编译结束以#endif结束


2.#ifndef 标识符

代码段1

#else

代码段2

#endif

3.#if 常量表达式

代码段1

#else

代码段2

#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: