天天看点

黑马程序员_object c学习日记_c语言部分

-------------------------------------- android培训、java培训、ios培训期待与您交流! ---------------------------------

C程序入口main函数;

1.    编写代码

2.    编译:把c语言代码编译成0和1

工具:clang编译器(Xcode3 gcc Xcode4 llvm(clang))

指令:cc –c 文件名.c(生产.o文件)

3.    链接:将.o文件和系统自带函数库合并生成可执行文件

指令:cc 文件名.o(生产可执行文件a.out)

4.    运行

指令:./文件名

注意:cc 文件名.c –o xxx(编译链接一起,生产可执行文件xxx)

注释:

1.    单行注释:从//开始到这行结尾

2.    多行注释:以结尾,中间都是注释

注释作用:

1.    不参与编译

2.    检查代码作用

3.    排除错误

数据

1.    静态数据:指一些永久数据

2.    动态数据:指在程序运行过程中,动态产生的临时数据

c语言数据类型:

1.    基本数据类型:整形int、单精度浮点型float、双精度浮点型double、字符型char

2.    指针类型:void *

3.    构造类型:结构体struct、共用体union、枚举enum

4.    空类型:void

内存分析:

1.    内存寻址是由大到小的,优先分配内存地址比较大的字节给变量

2.    变量越先定义,内存地址越大

3.    取得变量的地址:&变量名

4.    输出地址:%p

5.    一个变量一定要先进行初始化,才能使用

运算符:

算术运算符:+、-、*、/、自加、自减、sizeof

关系运算符:>、<、>=、<=、==、!=

逻辑运算符:&&、 ||、!

三目运算符:条件 ? 数值1 : 数值2

流程控制:

1.    顺序结构:默认

2.    选择结构:条件成立执行

3.    循环结构:在一定条件下,反复执行

选择结构:if

1.    if(条件) {语句;}

2.    if(条件) {语句;}else{语句;}

3.    if(条件) {语句;}else if(条件){语句;}else{语句;}

4.    if(条件) 语句;

选择结构:switch

switch (数值)

{

case 数值1:

    语句1;

    break;

case 数值2:

    语句2;

    break;

default:

    语句3;

    break;

}

如果在case里面定义新变量,必须使用大括号{}

循环结构:

1.    while(条件) {语句;}

2.    do {语句;} while(条件);

3.    for (语句1; 条件; 语句2) {语句3;}

continue; // 跳过本次循环,进入下一次循环

break; // 跳出循环,不再进行循环

函数声明:返回值类型函数名(参数类型参数名);

函数定义:返回值类型函数名(参数类型参数名)

{

    语句;

}

实参:调用函数时传入的数据

形参:函数内部保存传入数据的变量

注意:

1.    默认情况下,不允许有函数名称一样

2.    函数不能嵌套定义

3.    函数不能重复定义,但可以重复声明

4.    函数只声明不定义,可以通过编译,但是无法通过链接

include:拷贝文件所有内容到当前位置,<>表示从系统默认位置查找,””表示从用户当前路径查找

进制:十进制、二进制、八进制、十六进制

1.    默认情况下是十进制

2.    0b/0B开头表示二进制

3.    0开头表示八进制

4.    0x/0X开头表示十六进制

%d\%i 以10进制整数形式输出数值

%c 输出字符

%p 输出地址

%f 输出小数

%o 八进制形式输出整数

%x 十六进制形式输出整数

内存存储细节:

int number = 12; // 0000 0000 0000 00000000 0000 0000 1100

地址 变量 内容
Ff00 number 0000 1100
Ff01 0000 0000
Ff02 0000 0000
Ff03 0000 0000
Ff04

1.    按位与&:与0为0,与1保持原位

2.    按位或|:或0保持原位,或1为1

3.    按位异或^:相同为0,不同为1

4.    按位取反~:0取反1,1取反0

5.    左移<<:高位丢弃,低位补0

6.    右移>>:低位丢弃,高位补符号位

数组:类型数组名[元素个数];

数组作为函数参数会退化为地址

二维数组:类型数组名[数组个数][元素个数];

指针:类型 *变量名;

指向指针的指针:类型 **变量名;

局部变量:在函数(代码块)内部定义的变量;从定义变量哪一行开始分配空间,一直到代码块结束被回收;没有初始值

全局变量:在函数外定义的变量;程序一启动就会分配空间,程序退出时才会被销毁;默认初始值为0;

结构体:可以由多个不同类型的数据构成

定义结构体类型时并不会分配存储空间;定义结构体变量时才真正分配空间;

指向结构体指针:struct Student *stu;

利用指针访问结构体成员:(*stu).成员名称;stu->成员名称;

枚举enum:变量只具有固定的值

预处理指令:在代码被翻译成0和1之前进行的动作;所有预处理指令都是以#开头

1.    宏定义:

#define SUM(a, b) ((a) + (b))

#define COUNT 5

2.    条件编译

#ifndef AAA

#define AAA

#if defined(AAA)

#endif

#endif

3.    文件包含

#include <stdio.h>

#include “aaa.h”

typedef关键字:

typedef int MyInt;

typedef char * String;

typedef struct Student {

int age;

int no;

} Student;

typedef int (*SUM)(int a, int b);

static关键字和extern关键字

修饰函数:

1.    static修饰定义内部函数,其他文件无法访问;

2.    extern修饰定义外部函数,其他文件可以访问,默认情况下所有函数是外部函数

修饰全局变量:

1.    static修饰定义内部变量,其他文件无法访问

2.    extern修饰定义外部变量,其他文件无法访问;默认情况下所有全局变量都是外部变量

修饰局部变量:

1.    static修饰局部变量,所有调到同一函数都共享这个变量,作用域没有变化,但是生命周期到程序结束才被销毁;

递归的2个条件:

1.    函数自己调用自己

2.    必须有明确的终止条件

 -------------------------------------- android培训、java培训、ios培训期待与您交流! ---------------------------------