iOS开发学习之C语言---C08 高级指针-1
来源:互联网 发布:excle怎么做数据分析 编辑:程序博客网 时间:2024/04/30 13:38
//
// main.m
// C08 高级指针-1
//
// Created by 康亮亮 on 15/10/16.
// Copyright (c) 2015年 Darling.com. All rights reserved.
//
#import <Foundation/Foundation.h>
// 声明一个结构体类型student:成员变量有:name,age,score,gender
typedef struct student {
char name[20];
int age;
float score;
char gender;
}Student; //结构体的数据结构和OC中的类非常相似,OC中的类使用结构体的方式来管理。OC中的类名首字母一般大写,所以在给结构体重命名时也要大写。
//练习1
typedef struct cpoint{
float x;
float y;
}Cpoint;
float length(Cpoint *p1,Cpoint *p2){
// float xLength = ((*p1).x - (*p2).x )*((*p1).x - (*p2).x);
float xLength = (p1->x - p2->x) * (p1->x - p2->x);
// float xLength = ((*p1).y - (*p2).y )*((*p1).y - (*p2).y);
float yLength = (p1->y - p2->y) * (p1->y - p2->y);
float sumLength = xLength + yLength;
float result = sqrt(sumLength);
return result;
}
//练习1
typedef struct stu{
int no;
char name[20];
char gender;
float score;
}Stu;
//练习2
typedef struct printstu{
int no;
char name[20];
char gender;
float score;
}printstu;
//练习3 函数功能:查找学员数组中性别为男的学员,给他成绩增加10分,超过100分的记为100分
void jiaFen(Stu *p,int count){
for (int i =0; i <count ; i++) {
if ((p+i)->gender =='m' ) {
(p+i)->score +=10;
if ((p+i)->score >100) {
(p+i)->score =100;
}
}
}
}
//练习3 将打印输出功能封装在一个函数里(比较结构体指针作为参数,结构体数组作为参数的区别)
void printStu(Stu *p,int count){ //指针作为参数,要加一个元素个数
for (int i =0; i < count; i++) {
printf("name = %s, gender = %c, score = %.2f\n",(p+i)->name, (p+i)->gender, (p+i)->score);
}
}
//void printStu(Stu students[], int count){ //数组作为参数,要加一个元素个数
// for (int i = 0; i < count; i++) {
// printf("name = %s, gender = %c, score = %.2f\n",students[i].name, students[i].gender, students[i].score);//访问元素的方式不同!!!
// }
//}
int main(int argc,const char * argv[]) {
#pragma mark 8.1 结构体指针
/*
指向结构体变量的指针就是结构体指针。
结构体指针的类型必须和结构体变量的类型一致。
*/
//
// 定义一个Student类型的结构体变量:stu1
Student stu1 = {"xiaoMing",25, 96.50, 'f'};
//使用结构体变量名+.+成员变量名的方式访问
printf("stu1.name = %s\n", stu1.name);
printf("stu1.gender = %c\n", stu1.gender);
//定义一个指针,来指向这个结构体变量
Student *p = &stu1;
//使用指针访问结构体变量的成员变量
//方法一:先取出结构体变量的值,然后通过.找到他的成员变量
printf("(*p).name = %s\n", (*p).name);// 由于.运算优先级比*高,所以使用.()干预他们的运算顺序
printf("(*p).age = %d\n", (*p).age);
//方法二:使用 指针名 + ->访问结构体的成员变量
printf("p->age = %d\n", p->age);
printf("p->name = %s\n", p->name);//指向成员变量name首地址
printf("p->gender = %c\n", p->gender);
// 访问name成员变量的首个字符
printf("*(p->name) = %c\n", *(p->name));//取出指向成员变量name首地址值x
// 访问name成员变量的第2个字符
printf("*(p->name + 1) = %c\n", *(p->name +1));//取出指向成员变量name第二个地址值i
char str[] = "hello";
char *p3 = str; //可修改
printf("%s\n",p3);
printf("%c\n",*p3);
printf("%c\n",*(p3 +4));
/*练习1
定义⼀一个点坐标的结构体CPoint,包含两个float成员x,y。定义两个CPoint结构体变量m,n
使⽤用两个结构体指针分别指向m,n然后通过指针计算两点距离(提⽰示:1、勾股定理,2、开⽅方函数sqrt)*/
// 定义两个Cpoint结构体变量
Cpoint a = {1,2};
Cpoint b = {4,4};
//使用两个结构体指针分别指向a,b
Cpoint *p1 = &a;
Cpoint *p2 = &b;
//通过指针计算两点距离
float result = length(p1,p2);
printf("%.2f\n", result);
/*练习2
student stu = {1,”lan ou”,’m’,95.6};
student * p = &stu;
请通过p将name成员中的第一个字母改成大写,所有’ ‘(空格)改成下划线’_’
*/
Stu stu = {1,"lan ou",'m',95.6};
Stu *stuP = &stu;
//通过p将name成员中的第一个字母改成大写
for (int i =0; i < strlen(stuP->name); i++) {
if (*(stuP->name) >'a' && *(stuP->name) <'z') {
*(stuP->name) = *(stuP->name) -32;
}
// ’ ‘(空格)改成下划线’_’
if (*(stuP->name+i) ==' ') {
*(stuP->name+i) ='_';
}
}
printf("%s\n", stuP->name);
#pragma mark 8.2 指针与结构体数组
/*
结构体数组的数组名,就是一个结构体指针,只不过,数组名是一个常量,不能修改数组名保存的地址
*/
Stu students[5] = {
{1,"zhiNan", 'f',22.22},
{2,"jackChen", 'm',33.33},
{3,"xiaoKang", 'f',44.44}
};
// 定义一个结构体指针,指向数组students
Stu *sp = students;
//使用数组名+下标的方式,访问第一个元素的name成员变量
printf("%s\n", students[0].name);
//使用指针取值的方式,访问第二个元素的no成员变量(不常用)
printf("%d\n",(*(sp +1)).no);
// 使用指针 + —>的方式访问第三个元素gender成员变量
printf("%c\n", (sp+2)->gender);
/*练习3
使⽤指针 查找学员数组中性别为男的学员,成绩增加10分,超过100分的记为100分)
*/
Stu studs[5] = {
{1,"jolin", 'f',22.22},
{2,"jay", 'm',33.33},
{3,"jack", 'f',44.44},
{4,"darling", 'm',91},
{3,"steven", 'm',44.44}
};
//定义一个结构体指针,指向数组studs
Stu *ps = studs;
//
jiaFen(ps, 5);
printStu(ps,5);
return 0;
}
- iOS开发学习之C语言---C08 高级指针-1
- iOS开发学习之C语言---C08 高级指针-12
- iOS开发之c语言基础-高级指针
- ios开发之c语言基础-高级指针题目
- 【学习ios之路:C语言】②高级指针应用
- iOS开发学习之C语言---C07 指针-1
- iOS开发学习之C语言---C10 函数指针-1
- C语言学习之指针高级
- ios开发-c语言之指针的学习
- iOS开发学习之C语言---C07 指针-2
- iOS开发学习之C语言---C10 函数指针-2
- iOS开发学习之C语言---C10 函数指针-3
- iOS开发之--C语言之指针
- IOS开发系列--C语言之指针
- IOS开发系列--C语言之指针
- iOS开发系列--C语言之指针
- IOS开发系列--C语言之指针
- ios开发之c语言基础-指针
- Android三种播放视频的方式
- No resource found that matches the given name 'Theme.AppCompat.
- 设计模式——结构型模式
- 《基于MVC的JavaScript Web富应用开发》 电子工业出版社 (二)
- java设计模式之单例模式
- iOS开发学习之C语言---C08 高级指针-1
- 找两条单链表的公共结点
- Altium Designer 对覆铜的切割和挖孔
- iOS开发学习之C语言---C08 高级指针-12
- apache2 开发C++模块 —— 基于cximage实现图片、缩略图下载功能
- pdg转pdf的正确方法!!
- iOS开发学习之C语言---C09 动态内存分配
- 关于字符串(1)
- 敏捷实况1:项目概况