数据结构的数组和指针小解

开始学数据结构,按我的课程顺序,我每个小章节都做了自我的理解,然后以实验为例子进行分析,可能不适合大众,只是自我的一个小结。
1、将10个整数据存入数组a[10],并将其逆序输出(用函数实现)。
程序的结构如下:

void inverse(int str[])
{
int t=0,i;
for(i=0; i<5; i++){
t=str[i];
str[i]=str[9-i];
str[9-i]=t;
}
return ;
}
void main()
{
int a[10],i;
for(i=0;i<10;i++)
scanf(%d”,&a[i]);
inverse(a);
for(i=0;i<10;i++)
printf(%d ”,a[i]);
}

结果如下:
在这里插入图片描述
**小结:**逆序好说,就是将12345他们的存储顺序反过来。

2、编写程序,用动态分配空间的方法(new和delete)计算Fibonacci数列的前20项存储到动态分配的空间中,并输出。
程序如下:

#include
int main(){
int *p =new int[20];
int t1=1,t2=1,i;
p[0]=1;p[1]=1;
for(i=2; i<20; i++){
p[i]=t1+t2;
t1=t2;
t2=p[i];
}
for(i=0; i<20; i++){
printf(" %d",p[i]);
}
delete []p;
}

结果如下:
在这里插入图片描述
**小结:**但是动态分配要注意关键字的搭配使用。new、delete搭配,malloc、free搭配。
new从底层讲,还是用的malloc,但是它比malloc好些,它会帮你再分配空间时顺带构造对象,也就是分配的空间的数据类型。
new在使用的时候有三种:
int * p = new int; 创建int字符数大小的空间。
int * p = new int(5); 给对象创建时一个初始化的参数5.
int * p = new int[5]; 创建的对象有5个位置,类似数组有5个存储空间,能放5个相对独立的数据。如同上面第二题的斐波那契数列的前20个数列,就放在了20个相对独立的数据空间种。

再就是搭配使用delete,用来释放分配到的空间。
对delete来说,new的使用分为两种:
int * p = new int;
int * p = new int[5];
相对应的,delete也有两种:
delete p;——释放名字为 p 的空间(或者说首地址为p指向的空间)。
delete []p;——释放名字为 p 的数组空间。
要注意,如果使用的new是:int * p = new int[5]; ,则,要注意delete的使用形态,不然可能空间释放不充分:
int * p = new int[5]; 搭配 delete p;
——释放的是数组空间p的第一个空间,类似p[1]。
int * p = new int[5]; 搭配 delete []p;
——释放的是整个数组空间p。
对于指针,这个不好说,我可能会等学完了专门整个板块来写我对于它的理解,毕竟指针是C的精华所在,我们要给点面子,理解起来是挺难的,不是吗。
对于温习指针的话,推荐一个B站的视频:
指针俩小时温习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值