首页 > 编程知识 正文

给数组动态内存分配,c语言动态分配内存函数

时间:2023-05-06 10:37:37 阅读:241351 作者:2201

动态输入数组小结+字符输入问题 动态内存分配数组

1. 可直接a[N];
2. 能知道N;
3. 一个个输入,遇换行停;

1.int a[N]; // C99,变量可当下标,数组范围可变。 2.int *a,n;//定义一个指针a和变量n scanf(“%d”,&n)// 输入n的值 a=(int*)malloc((n+1)*sizeof(int)) // 申请 N+1个 int 空间,a指向该空间(多申请一个空间,如果是字符动态数组就能放个0) //将 a 等同a[n],将其当数组用即可,这个也不难。3.这部分有好几种方法,都放一放。 - 一段一段的申请数组空间; - 先暴力定义一段长数组的,输入至结束,再strlen看申请需要的空间; - 与realloc一起用,一点点扩大数组范围。 /* 一段一段申请*/ {int i=0,j=0,d=0,surplus=0; char *p=0,*temp=0,c0; p=(char *)malloc(10*sizeof(char));//p指向十个char的空间 while(1){ c0=getchar(); if(c0==10||c0==32||c0==13||c0==9) {//遇空格、换行、回车、TAB等停止 p[i]=0;//遇到空格类字符后,赋给数组最后一位 break; } p[i]=c0;//输入为非空格类字符,赋给p[i] i++; surplus=i%10; if(surplus==0) { //分析第一次进入时 //i为10的倍数即 surplus=0,说明已经用完了10个char,p[0~9],已经赋值 d=i/10;// 第一次进入d=10/10=1,第二次d=20/10=2,依此类推 d++; temp=(char*)malloc(10*d*sizeof(char)); //原有10个char,第一次进入后,重新申请20个char。第二次进入30个char,依此类推 for(j=0;j<i;j++){ temp[j]=p[j];//将p指向的值全部赋给新指向的位置 } free(p); p=temp; } } return p; } /*先定义一段长数组*/ { char s[100000]; char ch; char *p; int n; scanf("%s",s);//输入一个字符串,scanf遇空格类停止 n=strlen(s); p=(char*)malloc(sizeof(char)*(n+1));//申请n+1 char空间 strncpy(p,s,n);//将s前n位赋给p p[i]=0;//最后一位补0 return p;}/*与realloc一起用*/{ int i; char *p,c0; p=(char *)malloc(sizeof(char)*2);//申请两个char for(i=0;;i++){ realloc(p,i+2);//将p变成2-3-4-5等等个char scanf("%c",&c0); if(c0==10||c0==32||c0==13||c0==9) { p[i]=0;//为空格类则赋0 break; } p[i]=c0; } return p; } /**# 总结:1.malloc(),realloc(),感觉挺难用的,得搭配着free(),没搞明白怎么回事尽量少用。realloc(p,n)是将指针p所指空间变大(小),变成n,如果所指总空间不够,就会去另外申请一块空间再将原数据拷贝,指针返回。但是重新分配失败会返回NULL,那么原来p指向的区域就丢失了。2.说到底,还是多用大范围数组,兜兜转转,不如一个n=1000实用。**/ 输入函数getchar()//得到一个字符,不过返回int类型;putchar()//输出一个字符,可以将int a=getchar(), char c=getchar(),然后可以putchar(a),putchar(c),输入“6x”,输出也是“6x”,还可这样输出putchar('n');gets()//得到一串字符数组,遇回车停,用于一串含空格的输入;scanf(“%s”,s)//得到一串数组,遇空格类停,感觉一段一段字符串输入不太好用,就感觉有什么地方不对,但又说不出来,学艺不精。 最后

开始想写的有很多,后面又不知道写什么…
是写了一堆注释然后把自己思路打断了吗???

所以,格子衫不喜欢的人分两类?
1. 写代码不加注释的人;
2. 写代码让我加注释的人。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。