0、指针 就是地址
1、指针类型: 基本类型
2、空指针类型变量:没有意义,只是一个指针空间,用于记录地址(不能运算)
void* 变量;
注:由于空间指针void*不知道尺寸(类型),是不能进行+ -运算的
3、空地址:每个数据空间都有地址(地址>0),设置地址为0的指针为空指针(不指向任何的元素)
注:指针变量必须初始化
typedef NULL (void*)0;
堆区 (程序员空间):空间由用户申请,由用户来释放空间。
API: 申请 malloc(size_t bytes) 释放:free
注:bytes代表字节的数量
注:malloc/realloc返回值为NULL,申请失败
注:头文件为 stdlib.h
3.1使用步骤:
1、申请 p=malloc(size_t)
2、使用
3、释放 free(p);
3.1.1变量空间
3.1.2数组空间:
概念:是一块同类型且连续的存储空间
二分查找,利用动态数组
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35#include<stdio.h> #include<stdlib.h> void main() { //申请一块内存空间 buf[8] int* p=(int *)malloc(sizeof(int)*8); //8个人的成绩 且每个元素为4Byte if(NULL!=p) { int i=0; while(i<8) { *(p+i)=i+1; i++; } int l=0,r=7,mid; while(l<=r) { mid=(l+r)/2; if(5<p(mid)) { r=mid_1; } else if(5>p(mid)) { l=mid+1; } else { printf("查找成功n"); break; } } }
利用动态数组的方法写去一个字符
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29#include<stdio.h> #include<stdlib.h> void main() { //定义指针变量存放地址 char* pc=NULL; //分配空间 pc=(char *)malloc(sizeof(char)); //使用空间 if(NULL!=pc) { *pc='a'; printf("%cn",*pc); } //释放空间 if(NULl!=pc) { free(pc); pc=NULL; } }
利用结构体,动态数组写入元素 ,如果空间不够,继续申请一个空间,并且将老空间赋值给新空间
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69#include<stdio.h> #include<string.h> #include<stdlib.h> struct Array { int* data; //记录堆区地址 unsigned short len; //容量长度 short index; //索引 实际的长度 }; void main() { //功能:1,增加元素 2.查找3.遍历 int opt=0; struct Array a={NULL,0,-1}; while(1) { printf("please input 0/1/2/3"); switch(opt) { case 0: //释放 { if(len>0) { free(a.data)=NULL; a.data=NULL; a.len=0; a.index=-1; } return ; //结束函数 } break; case 1: //插入成绩 当容量不足的时候申请空间 { int score; printf("请输入成绩"); scanf("%dn",&score); //判断是否为满 if(a.index+1=a.len) { printf("为满"); int* pnew=(int*)malloc(sizeof(int)*(a.len+5)); if(NULL!=pnew) { //将老空间赋值给新空间 /*int i=0; for(i=0;i<a.index;i++) { pnew[i]=a.data[i]; } */ memcmp(pnew,a.data,(a.len)*sizeof(int)); free(a.data); a.data=NULL; a.len+=5; } else { int sc; printf("please input"); scanf("%dn",&sc); a.data[++index]=sc; } } } } }
最后
以上就是慈祥导师最近收集整理的关于动态数组 【详解】的全部内容,更多相关动态数组内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复