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数组空间:
概念:是一块同类型且连续的存储空间
二分查找,利用动态数组
#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;
}
}
}
利用动态数组的方法写去一个字符
#include<stdio.h>
#include<stdlib.h>
void main()
{
//定义指针变量存放地址
char* pc=NULL;
//分配空间
pc=(char *)malloc(sizeof(char));
//使用空间
if(NULL!=pc)
{
*pc='a';
printf("%c\n",*pc);
}
//释放空间
if(NULl!=pc)
{
free(pc);
pc=NULL;
}
}
利用结构体,动态数组写入元素 ,如果空间不够,继续申请一个空间,并且将老空间赋值给新空间
#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("%d\n",&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("%d\n",&sc);
a.data[++index]=sc;
}
}
}
}
}
今天的文章动态数组的实现原理_动态数组怎么定义[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/71002.html