c语言笔记

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 )+ 任意范围随机数
 
当判断条件比较多时可用到 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结尾的基本都是指针
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr__Hacker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值