动态内存分配
1.队列和栈的区别 : 栈中得变量 先进后出 ,队列中得变量 先进先出
2.堆内存 一般由程序员分配和释放
3.malloc: void *malloc(unsigned int size);//void * 表示任意类型的指针
int * p = (int *)malloc(sizeof(int));//(int *)强转类型 sizeof(int)分配的内存大小
char *str = malloc(8);
strcpy(str, ”iPhone”);
free(str);//标记删除,不清除内容
4.Student *p = malloc(sizeof(Student));//分配的内存大小要用 sizeof(Student)
5.void * calloc(unsigned n,unsigned size);//n内存个数 size大小 calloc 清空内存
6.void *realloc(void *p,unsigned newSize);//按新的长度重新分配
7.void *memset(void *s , int c , size_t n);//memset(p , 0 , sizeof(int) * 5) 通常用于清除结构体或者数组数据
链表
1.struct stu{
int num; //数据域
char * name;//数据域
struct stu * next;//指针域
}
2.
typedef struct stu{
int num;
char
* name[20];
struct stu *
next;
}Stu;
int main(int argc, const char * argv[])
{ Stu stu1 =
{1,"SQJ",NULL};
Stu stu2 =
{2,"ZYL",NULL};
Stu stu3 = {3,"LCD",NULL};
stu1.next = &stu2;
stu2.next = &stu3;
// stu3.next =
&stu1;//循环链表
Stu * head =
&stu1;//头结点
while (head != NULL)
{
printf("%d:%s\n",head->num,head->name);
head = head->next;
}
return 0;
}
宏 枚举 const、static
1.宏 :命名规则 纯大写(MAX) 或者 k+驼峰(kMax)
主要用于把网络接口定义成宏
#import <Foundation/Foundation.h>
#define kMAX 99 //不要有分号 无参宏
#defint k printf("hello,world\n");//k 后面的原样 无参宏
#define maxValue(A,B) \ //换行
A > B ? A : B//有参宏
#define chengji(A,B) (A) * (B) //加()安全
int main(int argc, const char *
argv[])
{ int a = kMAX;
printf("a =
%d\n",a);
k //不用分号 因为上面有
printf("max = %d\n",maxValue(3, 5));
printf("ji = %d\n",chengji(1 + 2, 2 + 3));
return 0;
}
2.条件编译
形式一:
#ifdef 标识符? 代码段1?
#else? 代码段2?
#endif
形式?:
#ifndef 标识符? 代码段1?
#else? 代码段2?
#endif
形式三:
#if 常量表达式? 代码段1?
#else? 代码段2?
#endif
3.枚举类型: 核?心作用:将?人能看懂的标识符与计 算机能看懂的数字建立对应关系。
enum oper {
JIA = 1,
JIAN,//没赋值
递增加1
CHENG,
CHU,
};
int
main(int argc, const char * argv[])
{
printf("%d %d %d %d\n",JIA,JIAN,CHENG,CHU);
return 0;
}
3.const:限定一个变量不能被修改 增强程序安全性(防修改) 比如struct strlen memcpy
const int a = 8;//a不允许重新赋值
(把类型去掉 看 )
const int * p//p指向的内容不可以改
int * const p//p的指向不可以改
const int * const p//p的指向 p指向的内容都不可以改
4.static:
被static修饰的变量存储在全局区(静态区)。
如果不赋值,默认为0.
在main之前就初始化,只能初始化?次,但是能多次赋值。