苹果的发展简史 & C语言

第一章节----苹果的发展简史 & C语言

一. 简述

型号:Lisa Macintosh OS X Yosemite
在2012年由Mac OS X--->OS X
iOS6-7的变化过程:拟物化过度向扁平化 Mail Drop中转站
iPhone OS---->iOS
Mac的操作系统是基于Unix的

二. Mac的使用

/根目录 前往--->前往文件夹(按住option可以出现资源库)
finder-->偏好设置-->边栏-->小房子-->再选中小房子-->command+J显示系统文件
command+shift+Go /...进入目录
command+control+F 放大
同一个应用程序的不同文件(两个界面)切换 快捷键 :command + ~
command+shift+3/4 截图 全屏/自动选取

三. 终端的使用

stdlib.h等价于math.h 指调用数学函数
链接 CC+空格-c 文件.c
编译 cc-o 重命名 文件.o
./文件 执行文件
cd/system表示转到根目录下的System文件中
cd system表示转到当前目录下的System文件中
ls /users/mac/desktop
C语言 C89 C90 C99 C11
C语言是一门面向过程的语言,一个C程序只能有一个main函数
CLang编译器和Xcode绑定在一起
~表示根目录
编写程序的4个人步骤: 编写程序-->编译-->链接-->运行
cc 空格-c 空格 源文件.c-->cc 文件.o-->./a.out 使用向上和向下的箭头可以转换当前的编译步骤
.o文件也叫做目标文件
编译和链接合成一步: cc 源文件.c-->./a.out

四. C入门---数据类型

多行注释不要嵌套使用
标志符:区分大小写;不能以数字开头;不可以使用关键字
CPU读取和写入
浮点型定义默认是double型

float score;
score = 100.00f;
printf("score=%.2f\n",score);

浮点型默认保留6位小数 float单精度 double双精度
char d='A'; 存储单位最小bit(位,字)
long long 的占位符是%lld;
Byte(字节) 8bit=1Byte
char中放的字母只能有一个,而且不能是汉字
数值越界指:超过了最大值
用long修饰的整形可以省略int 即long等价于long int;
在64位系统中long long 和long是一样的 没有3个long,short只有一个

short a=1223;
printf("a=%d",a);

有符号 signed int a1=1234;
无符号 unsigned int a2=111100;
int默认是有符号的,signed和unsigned不能省略int unsigned的占位符是%u
获取数据类型存储大小

int a4;
a4=32323;
int size=size of(a4);
printf ("size=%d\n",size);

数据类型的转换:小类型+大类型=大类型
数据类型按大小排列:short,char<int<long<float<double

计算实例:标称的100GB硬盘其实际容量为(100 X 100 X 100 X 100字节)/1024 X 1024 X 1024)=93.1GB 由此可见:产品的容量缩水只要满足计算机的实际容量结果(上下误差应在1%内)
数据类型的强制转化

float c=10.0/3;
printf ("c=%f\n",c);
float c=(float)10/3;
printf ("c=%f\n",c);

在编程中只有两个数据类型相同的数才能做运算
pow(底数,幂次)例如r2,使用需先导入math.h库*
判断:成立为真输出1,相反则输出0

int a=5<4;
printf ("a=%d\n",a);
//通过a的值即可以判断真假

例如:4<2<4 结合方向,从左到右
具体比较:先比较4<2的结果是0,然后再比较0<4结果为1

算数的优先级:算数运算符的优先级>关系运算符的优先级
小括号();中括号[]的优先级比较高
关系运算符指输出结果,即真和假
"=="等于 与 "!="不等于 一般最后比较

五. 函数的引入

三目运算符

int score=80;
int i=score>60? 1:0;
printf ("i=%d\n",i);
//比较真假.真执行1,假执行0;1和0可以替换为其他的方法

scanf函数用来接收键盘上的输入
%p表示地址的占位符,"&"表示取地址符
Ox表示16进制
scanf函数只能存在占位符,不能存在其他字符;

if函数的引入

单个if小括号中的文件为真才会执行花括号里面的内容,非零即为真

if (条件) {
    printf("满足条件输出...");
} else {
    printf("否则输出...");
}

if~else函数:只要满足其中的一个条件,只会执行这个条件下的代码,其他条件都不会执行.
大作用域定义的变量能够在被其包含的小作用域使用,反之则不行
if单独使用时{}是可以省略的,默认是从if语句下面的第一行为作用的范围,建议不要这样使用

switch函数的引用

一般switch函数用来做等值比较

switch (变量) {
    case 常量:
    break;
    
    case 常量:
    break;
    
    ...
    
    default:   //与上面条件都不相等时执行它
    break;
}

判断0~100之间的成绩用switch做可以先除以10再做switch的运算

循环结构一般遵守三个原则
1.定义循环变量 --->控制循环次数
2.设置循环条件 --->循环体,满足条件才会执行
3.更新循环变量

三种循环结构---1.while型循环 在里面可以嵌套使用if语句

先判断在执行

int a=0;
while (a<10) {
printf("hello%d",a);
a++;
}

三种循环结构---2.do-while型循环

先执行后判断

//第一步
int b=0;
do {
    printf("hello %d\n",b);
    b++;        //第三布
} while (b<10);         //第二步

如果将a和b的值都取10,那么执行后a的不输出,b的会输出
while和do-while的区别
1.while是先判断后执行,do-while是先执行后判断
2.当循环条件不满足时,while一次也不执行,但是无论什么情况下do-while至少都会执行一次循环体

三种循环结构---3.for型循环

for(1循环变量(值初始化);2循环条件;4更新循环变量){
3循环体
}
执行顺序:1-2-3-4-2-3-4

for (int i=10;i<10;i++) {
    printf("hello %d\n",i);
}

跳转语句

break中途跳出循环

for (int a=10;a<10;a++){
    if (a ==8) {
        break;  //直接跳出整个循环
    }
    printf("跑了%d圈\n",a);
}       

continue继续从中途退出加入

for (int a=0;a<10;a++) {
    if (a==8) {
        continue;   //跳出本次循环,不会跳出整个循环
    }
    printf("%d\n",a);   
}   

六. 变量

定义:数据类型 变量名 =初始值;
数组:数据类型 数组名[元素个数] =初始值;
一般情况下如果数组没有存满,没存的一般都填充0
数组的几种方式
1.int arr[3]={2,3,4};
2.int arr[5]={2,3};
3.int arr[]={2,4,5} 这种情况下系统默认开辟三个
数组越界:访问不存在的数据,一般尽量避免
数组的遍历

int a[3]={1,2,3};
//sizeof函数用来计算数组中的元素个数
int count=sizeof(a)/sizeof(int);
for (int i=0;i<10;i++) {
    int value=a[i];
    printf("%d\n"value);
    printf("a[%d]=%d\n",i,value);
}

二维数组:int a[3][2]={{2,4},{4,6},{3,2}};
字符串:用双引号引起来的内容就叫字符串,且尾部有一个"\0",表示字符串的结束
字符串的初始化
1.char a[5]={'w','x','h','l','\0'};
2.char b[5];
b[0]='w';
b[1]='x';
b[2]='h';
b[3]='l';
b[4]='\0';
3.char c[5]="wxhl";
4.char *d="wxhl";

二维数组的遍历

int arr[2][3]={{1,2,3},{2,3,4}};
for (int i=0;i<2;i++) {
    for (int j=0;j<3;j++) {
        printf("a[%d][%d]=%d\n",i,j,arr[i][j]);
    }
}   

字符串的遍历

char *str="wxhl";
int len=strlen(str);    //strlen函数是求字符串中的字符个数
for (int i=0;i<len;i++) {
    char c=str[i];
    printf("%c\n",c);
}

打印字符串

char str[]={'w','x','\0'};
printf("%c\n",c);

七. 指针

指针:一块内存地址
定义指针:数据类型 变量名 =初始值

int *point=&a;
printf("point=%p\n"point);

point存的变量a的地址,*point是point指针变量的地址
通过指针可以修改变量的值 *point=20;
第一个指针指的是数据类型,第二个指针指的是指针运算符,实质表示访问指针指向的地址所在的内存空间

所有的指针变量:8字节
指针一旦指定某个变量,除非改变指针指向的地址,否则指针一直指向这块内存空间

八. 函数

1.函数声明

''#include''作用是:把文件名为< >中的拷贝到当前文件
可以实现某个功能的代码(程序)段
返回值类型 函数名(形式参数)

int main (int argc,char const *argv[])
{
    /* code */
    return 0;   0和int对应
}

函数的定义和调用

// 1.定义
int sum(int a,int b){
    int s=a+b;
    return s;
}
// 2.函数的调用
int a=sum(2,4);
printf("a=%d\n",a);

1.没有返回值,没有参数的函数

void printf(){
    printf("hello\n");
    return; //  如果没有返回值 (空类型 void) return可以省略
}

2.调用函数,先走函数调用的地方,函数调用完之后会回到调用的地方,函数可以重复调用

//没有返回值带参数
void ask(int a){
    printf("查询学号为%d的成绩\n",a);
}

3.函数名必须唯一,不能重复.遵守驼峰标志符
4.函数不能嵌套定义
5.一个函数可以没有返回值,但需用void类型,实参可以给形参赋值
声明函数
告诉编译器函数已经定义过,
返回值类型 函数名(形参)
1.在声明函数时形参可以省略,()不能省略;
2.声明函数写在int main()上面;
3.声明函数最好写在函数调用的前面,最好写在int main()上面
4.用const修饰的变量会编程常量,不能对他进行修改

2.Rand( ),产生随机数函数

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int t=time(0);
rand(t);
for (int i=0;i<10;i++) {
    int result=rand()%100;
    printf("result=%d\n",result);
}

随机数种子函数.根据时间的不同产生不同的随机数种子,进而产生不同的随机数

宏定义后面不接;
宏写在字符产里面不会被替换

#define PI 3.14
#undef PI  结束宏定义

3.函数的调用

1.嵌套调用
2.递归调用:函数本身调用本身(自己掉用自己)容易造成死循环

九.结构体,枚举

局部变量,仅限于{}
不能先赋值再定义
全局变量定义在函数外面的变量
全局变量都是静态变量,自动变量都是局部变量,局部变量不一定是自动变量

自动变量用auto修饰,局部变量默认用auto修饰
生命周期:从定义开始的地方,到函数或者代码块执行完毕

静态变量用关键字static修饰
生命周期:伴随这整个应用程序始终

自动变量
硬件寄存器,在CPU里

寄存器变量:本身就是自动变量,效率高,只能修饰自动变量
register int c=100;
只限于int,char,浮点型和指针类型使用

extern修饰的函数就是外部函数,可以被其他文件访问,默认就是extern修饰
static修饰的函数是内部函数,只能当前文件访问
extern修饰变量时,只能声明变量,不是定义变量
static修饰全局变量,就是内部变量,只能被当前文件访问

结构体
1.定义结构体

struct Person {
    char *name;
    int age;
    double weight;
}

2.使用:数据类型 变量名=初始值

struct Person  ps1; //先定义后赋值
    ps1.name="Wiz";
    ps1.age=20;
    ps1.weight=110;

①定义时直接赋值
strcut Person ps2={"Wiz",32,110};
②取值

char *name=ps1.name;
printf("ps1.name=%s\n",_name);
printf("%s  %d  %.2f",ps2.name,ps2.age,ps2.weight);

定义一个结构体的同时定义变量

struct Dog {
    char *name;
    char *color;
} dog;  //或者直接添加多个对象,用逗号隔开,最后加分号
dog.name="小黑";
dog.color="白色";
printf("%s %s\n",dog.name,dog.color);

①结构体自己不能定义自己递归调用
②一般名字不能想同
③在结构体中定义其他结构体
结构体所占的内存空间是最大成员变量的整数被之和--->"内存对齐"

定义一个结构体指针

struct Person *point=&ps2;
struct Person ps2={"li4",34,120};

指针运算符,通过指针修改结构体成员变量的值
point->name="zhao4";
访问结构图成员变量的值
char *name=point->name;
struct2.name=alloc(20); //给空间
需要<stdlib.h>库
alloc手动分配内存

enum weather wea=sunny;
enumweather 数据类型
取别名:typedef 本名 别名;

十.指针函数与函数指针

只需要记住后两个字,是什么就是什么

1.指针函数

int * test(int *p) {
    return p;
}

2.函数指针

1.创建函数
函数名称也是一个指针,指向的是本函数在内存中的地址

int sum(int a,int b) {
    NSLog(@"result=%d",a+b);
    return a+b;
}

函数指针可以调用函数,也可以作为参数传递到函数中

int getSum(int (*p)(int a,int b),int c,int d) {
    int result=p(c,d);   //等同于sum(1,1);
    return result;
}
int main(int argc, const char *argv[]){
    @autoreleasepool {
    //2.创建函数指针
    //返回值 (*指针名) (参数列表)
    int (*p)(int a,int b);
    
    //3.使用函数指针指向函数在内存中的地址
    p=sum;
    
    //4.调用函数
    sum(10,20);
    
    //5.使用函数指针来调用函数
    p(10,20);
    (*p)(10,10);
    
    //函数指针把函数作为参数传递到函数中
    int (*p1)(int a,int b);
    p1=sum;
    
    int lastResult=getSum(p1,1,1);
    NSLog(@"lastResult=%d",lastResult);
    }
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,432评论 3 44
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,514评论 1 51
  • 有雨有风的日子 你以一幅画的姿态出现 雨 洗去铅华 让你的身体焕发生机 风 摧残画瓣 让你的肤色铺满色彩 我在雨停...
    梧桐兮兮阅读 187评论 0 0
  • 我笑笑,抖了抖肩上的披风。 “你笑什么!”她恼火的声音在一片静谧中敲了一下,但是我并不想理她。 我笑是因为我知道,...
    逛街琵琶阅读 170评论 0 1
  • 原田伸雄:零的赤河 他的动作幅度并不大:一步步慢慢地走动,一点点下滑到半蹲的姿势、一寸寸移动脖子……,这是我第一次...
    七虞106阅读 551评论 0 0