无论是C还是C++,在学习数组时总有一个小小的愿望,就是能实现下边的事情。
//注意 !!! 这些代码是错误的!!!
#include <stdio.h>
int main(){
int n;
int a[n];//具体错在这
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",a[i]);
}
return 0;
}
什么意思呢,就是数组下标必须是常量。而很多人会有和博主一样的想法,我特别想自己用多少,就输入多少,但是我又不可能提前知道,能有一个动态的可大可小的数组可好…
那么今天,就来说说这个动态数组。
/*
动态数组的实现
以整型数组为例
*/
#include <stdio.h>
//malloc()函数的头文件
#include <stdlib.h>
int main(){
//这是我们想要去动态输入长度的那个“n”
int count;
scanf("%d",&count);
//因为不知道这块内存要保存什么类型的数据,将指针定义为“void”类型,它可以根据需要被转换为其他任何的指针类型,并指向空,初始化。
void* memblock = NULL;
//用malloc()函数动态申请内存,并将返回的指向这块内存区域首地址的指针赋值给memblock指针,也就是让memblock指针指向这块内存区域。
memblock = malloc(count*sizeof(int));
//定义指向这块内存区域(什么区域?就是存放动态数组的那块区域)的指针,并指向它。
int* array = (int*)memblock;
for(int i=0;i<count;i++)
{
//这里是数组的表达,一般教材里都有,array直接是这个数组的首地址,然后每次加一
scanf("%d",array);
array++;
}
//这里是让这个指针重新指向这个数组的开头
array =(int*)memblock;
for(int i=0;i<count;++i)
{
printf("%d\n",array[i]);
}
//当我们使用完毕后要释放掉实用的内存
if(NULL!=memblock)
free(memblock);
memblock=NULL;
//这行要解释吗...就是为了出来那个“按任意键结束......”ps因为有些编译器不自动加这个
system("pause");
return 0;
}
这就是动态数组的构建,仅仅是构建,是不是很方便呢,后边我会更新利用这个动态数组建立的表。
数据结构是我这里推荐的基础性学习科目,必须学好。对于一些逻辑性的东西。博主会更新一些数据结构方面的代码,栈啊队列啊,后边有图啊树啊什么的。
有人问嵌入式嵌入式呢 不是说好的嵌入式么
博主这两天就会更一个嵌入式C编程。
571

被折叠的 条评论
为什么被折叠?



