黑马程序员:iOS基础——个人笔记(五)

来源:互联网 发布:软件过程财富库 编辑:程序博客网 时间:2024/05/21 22:59
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

复杂数据类型:数组、字符串、指针、结构体、枚举

char -128~127 如果存此范围内的整数 省空间 因为它占1个字节

整型数组赋值

int   i[5] = {10,11};

int   i[5] = {[3] = 10,[4] = 11};

int   i[] = {10,11};

数组作为函数参数,可以省略元素个数

strlen函数:计算字符串长度(字符数)需要包含String.h文件。

一个汉字占3个字符数

查看数组是否含有某个字符

while(str[++i] != c && str[i] !='\0');

return str[i] !='\0';

%zd代表unsigned long

任何指针占8个字节

定义字符串2种方式:

利用数组 可修改

利用指针 不可修改char *s = "abc";

内存分为五块:

1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放  

5、程序代码区—存放函数体的二进制代码。

返回指针的函数

指向函数的指针

void  (*p)(  ) :左边void代表没有返回值,(*p)代表指的是函数,右边()代表函数没有形参。

函数名代表函数地址

利用指针调用函数 p();或(*p)();

结构体定义

struct  person{   };

赋值:struct person p={.height = 1.78, .name = "abc"};

结构体分配内存

补齐算法(对齐算法):长度是最大类型长度的倍数。

利用指针访问结构体成员

(*p).age == p ——> age

结构体:嵌套定义

枚举(enum)是一个被命名的整型常数的集合,枚举在日常生活中很常见。例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,SATURDAY, 就是一个枚举

预处理指令(3个),在代码翻译成0和1之前执行。

1)宏定义

#define宏名(一般大写或以k开头小写)

#undef宏名 //取消宏定义

带参数的宏:#definesum(a,b) ((a)+(b))

宏的值只负责替换代码不做运算;

带参数的宏定义比函数的效率高。

2)条件编译

概念:有条件的编译一段代码

用法:

#if条件1

...code1...

#elif条件2

...code2...

#else

...code3...

#endif

和宏结合使用

#ifdefine(max)等于#ifdef

3)文件包含

a、<>表示系统自带的文件,""表示自定义的文件

b、不允许循环包含

typedef:定义类型的别名

extern:外部函数的定义和声明,默认可省略;外部面两;

static:内部函数的定义和声明;内部变量;

static修饰局部变量,延长生命周期至程序结束,没有改变作用域


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
0 0
原创粉丝点击