c/c++实现动态数组代码示范如下:
要注意作用域、生命周期和使用的步骤
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Array
{
int *pa;
short ilen;
short top;
};
void main()
{
struct Array a={NULL,0,-1};
int opt;
while(1)
{
printf("Please Inpute:");
scanf("%d",&opt);
if(opt==1)
{
int grade;
printf("请输入成绩:");
scanf("%d",&grade);
if(a.top+1==a.ilen)
{
int *anew=(int *)malloc((a.ilen+5)*4);
if(anew!=NULL)
{
memcpy(anew,a.pa,a.ilen*4);
a.ilen+=5;
free(a.pa);
a.pa=anew;
}
}
a.pa[++a.top]=grade;
}
else if(opt==2)
{
int i;
for(i=0;i<=a.top;i++)
{
printf("%d\n",a.pa[i]);
}
}
}
}
一、指针
1、指针类型:基本类型
2、空指针类型变量:没有意义,只是一个指针空间,用于记录地址(不能运算)
void* 变量;
注:由于空间指针void*不知道尺寸(类型),是不能进行+ -运算的
3、空地址:每个数据空间都有地址(地址>0),设置地址为0的指针为空指针(不指向任何元素)
注:指针变量必须出示化
typedef NULL (void*)0;
二、作用域
1、作用域:能被引用的区间
(1)局部变量:在函数内定义(在函数)
(2)全局变量:在函数外定义(文件内)
注:引用变量,一定要注意作用域
三、生命周期
1、动态变量(栈区):auto 当函数运行开始,空间被申请,当函数运行结束,空间被释放。
2、静态变量():static 程序运行开始时空间被申请,程序运行结束时,空间被释放。
3、堆区(程序员空间):空间由用户申请,由用户来释放空间。
API:申请 malloc(size_t bytes) 释放:free
注:bytes代表字节的数量
注:malloc/realloc返回值为NULL,申请失败
注:头文件为 stdlib.h
四、使用步骤
(1)申请p=malloc(size_t)
(2)使用
(3)释放 free(p);
(4)数组空间:概念:是一块同类型且连续的存储空间
(5)内存复制
memcpy(des,src,size); string.h