2014/7/29
sp 短信服务商
tencent 腾讯 早期叫OICQ 之前腾讯是最大的sp
bat 三大巨头 百度 阿里 腾讯
36kr.com 发布所有it行业的信息
code review 代码审核
python 后台脚本语言
周报:自我总结,学习的情况还有建议
mac系统的底层是unix
unix 系统(70年诞生)的三个分支 :sco unix , linux (发布软件必须提供源代码), BSD
c语言72年诞生
76年创建的苹果公司 84--96 乔布斯是不在苹果公司的 这12年做了两件事,收购了皮克斯公司,创立了电脑公司NEXT . (next step 操作系统 ,内核是BSD) 但是现在的苹果系统现在的内核是XNU (x is not a UNIX).
苹果公司的市场是封闭 但是技术是开源的
语言的发展 BCPL—B ——NewB ——C
c语言:
通过bundle identifier 来标识程序
char是最小的整型
float 小数位数是六位 double 是15位
ASC
所有运算符的优先级最高的是括号
代码规范:双目运算加空格 逗号后面加空格
int a=100;
a+ +;
a=a+1;
a++的效率高很多
R 0--255
G 0--255
B 0—255
0,0,0是黑色 255,255,255是白色
expect 期望
expression 表达式
C语言标准 c89/c99里面没有输入输出的
Printf不是c语言的标准,是添加的库函数。例如#include<stdio.h>
%d======%i
\\ 输出\
%% 输出%
控制台调试窗口快捷键command+ shif+y
2014/7/30
主要讲 if switch
c语言中非0即为真
注意逻辑与和逻辑或的短路现象:
与: 当前面的条件不符合时不会再去计算后面的条件
或: 当第一个条件符合时不会再去计算后面的条件
条件分支的级联 嵌套
char a =
'\0';
浮点数是无法进行相等判断的。
system(
"say shabi");
//
语言提示
shabi mac
系统独有的系统命令 需要倒入头文件
#include
<stdlib.h>
switch(
整型表达式
){
case
整型常量表达式
:
break;
}
如果
case
里面定义变量就需要用{}
按住
commd
+
alt
+[或者]拖动代码移动
枚举:就是整型常量 而且数值是自增的,第一个设定了后会根据这个值自增。
伪随机数:rand()
srand()种子
真随机数:
arc4random()
返回无符号的整型
unsigned int
输出用%
u
随机数%(
b
-
a
+
1
)+
a
任意范围随机数
当判断条件比较多时可用到
break
break
用于跳出整个循环
continue
(待续)结束本次循环
斐波那契数列
1 1 2 3 5 8 13 21 34
……
unsigned int 0
pow()
2014/8/1
数组的名字无法修改。是个常量
sizeof() 是个运算符 是关键字 类型 long unsuigned
代码规范的作用:代码整洁,降低沟通成本,避免低级错误。
2014/8/4
//presentation
//Introduction 1 say hi 2 self-introduction 3
主题
//Body 1 content1 ……
//1 eye contact 2 speak 3 body language 4
自信
5 practice
//conclusion 1 summary 2 thanks 3 Q & A
陷阱库-----第一个单词: redefinition 重定义
c99 中对数组定义可以用变量,但是不可以进行初始化。例:int x=20;int array[x];
%g 输出float时将后面的0都去掉
宏:#define ,预处理指令,不能加分号结束,不会产生代码
#__counter__ 产生不重复的数字
#__NSX_PASTE__
宏常量 例:# define PI 3.14
带参数的宏 例:
#define MAXVALUE(A, B) ((A) > (B) ? (A) : (B))
复合赋值
int c = ({
int result = a > b ? a : b;
result;
});
printf(
"%d\n", c);
__typeof__(A)
取出
A
的类型
相对安全的宏:(如果参数时表达式会出现多次计算)
#define MAXVALUE(A, B) ({__typeof__(A) __a = (A); __typeof__(B) __b = (B); __a > __b ? __a : __b; })
函数不写返回值默认时int类型的。
2014/8/5
//
插入排序
int array[] = {
3,
2,
7,
9,
5,
4,
6,
1};
int count =
sizeof(array) /
sizeof(array[
0]);
for (
int i =
1; i < count ; i++) {
int j = i ;
int temp = array[j];
for (; j >
0 && temp < array[j -
1]; j--) {
//j > 0 && temp < array[j - 1]
不能前后调换,否则会导致数组越界。
array[j] = array[j -
1];
}
array[j] = temp;
}
for (
int i =
0; i < count; i++) {
printf(
"%d\n", array[i]);
}
//
选择排序,第一个和所有的比较,把最小的放在最前面
int array[] = {
3,
2,
7,
9,
5,
4,
6,
1};
int count =
sizeof(array) /
sizeof(array[
0]);
int min =
0;
for (
int j =
0; j < count -
1; j ++) {
min = j;
for (
int i = j; i < count; i ++) {
if (array[min] > array[i]) {
min = i;
}
}
if (min != j) {
int temp = array[j];
array[j] = array[min];
array[min] = temp;
}
}
for (
int i =
0; i < count; i++) {
printf(
"%d\n", array[i]);
}
//
冒泡排序
int a[] = {
3,-
9,
32,
77,
63,-
24,
14,
0,
21,
45};
int n =
sizeof(a) /
sizeof(a[
0]), c =
1, t;
for (
int i =
0; i < n -
1 && c; i++) {
c =
0;
for (
int j =
0; j < n -
1 - i; j++) {
if (a[j] > a[j +
1]) {
c =
1;
t = a[j];
a[j] = a[j +
1];
a[j +
1] = t;
}
}
}
for (
int i =
0; i < n; i++){
printf(
"%d\n", a[i]);
}
//
折半查找
int a[
9] = {
1,
2,
3,
4,
6,
8,
10,
11,
13};
int number =
10;
int len =
sizeof(a) /
sizeof(a[
0]);
int star =
0, end = len -
1, mid =
0, index =
0;
while (star <= end){
mid = (star + end ) /
2;
if(number == a[mid]){
index = mid;
break;
}
else
if (number > a[mid]) {
star = mid +
1;
}
else{
end = mid -
1;
}
}
printf(
"
第
%d
个数是
%d", index +
1, a[index]);
内存 : 栈内存 (自动)从高往低分配,从低往高存取
堆内存 (动态) 从低往高分配
全局静态区 (静态区)
常量区 (静态区)
代码区 (静态区)
静态区:应用程序一启动,这些内存就分配好了。常量区和代码区是不可改变的,全局静态区是可以改变的。
栈内存的空间有8M左右
堆内存的空间相对大很多,只有堆内存可以进行垃圾回收。堆内存的访问都是通过指针匿名访问的。
堆内存的分配成本比较高,在申请的时候需要查表
格式化:画格 分配地址
贪婪法
指针的类型是为了知道通过指针寻址的类型的空间大小,影响指针加一减一跳转多少个字节
a[0] 语法糖
a[0] ----à * ( a + 0)---à * ( 0 + a) ---à 0[a]
指针和数组最大的区别:1、指针可以赋值 数组名不可以 2、可以通过数组名求数组大小 指针不可以
异或 不同为1 相同为0
2014/8/7
const 常量 只能读 不能写
const int *p = &a ; 不能通过*p对a进行修改
static
int s =
0;
1、一但被static修饰,s将不在栈内存,将放在全局静态区,s将不会再随着函数的结束而释放。 并且静态变量的初始化只会被执行一次。函数在编译的时候会吧这行代码拿到函数外面。所以多次调用这个函数s也不会被多次初始化。
2、静态全局变量不会在当前文件以外的文件中访问到
3、如果没有手动初始化系统将自动初始化为0
分为:静态全局变量,静态局部变量
crash 冲突 ——指程序崩溃
一直申请内存不释放 就会导致内存泄漏(leak)
指针去访问一段已经释放的内存这个指针就叫做野指针——5
malloc 动态分配内存
calloc 系统自动清理内存
realloc 重新分配内存
memset 初始化内存
typedef 为现有类型创建⼀一个新的名字,或称为类型别名!
typedef 原类型 新类型
例如: typedef int Integer !
SDK : software development kit 软件开发工具包
API : application program interface
函数指针 : 本身是个指针 ,用来存储函数的地址。
回调函数 :
类的设计原则: 高内聚,低耦合 。高内聚是为了保护外部使用的安全。将类封装起来尽量,让外面更多正确的使用这个功能。
Reference 指向 ref结尾的基本都是指针