欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

动态内存分配数组

程序员文章站 2023-12-26 16:58:09
...

动态输入数组小结+字符输入问题

动态内存分配数组

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,t,d=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++;
  		t=i%10;
 
  		if(t==0) { //分析第一次进入时
  		//i为10的倍数即10,说明已经用完了10个char,p[0~9],已经赋值
   			d=i/10;// 第一次进入d=1,第二次d=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 i;
    scanf("%s",s);//输入一个字符串,scanf遇空格类停止
    i=strlen(s);
    p=(char*)malloc(sizeof(char)*(i+1));//申请i+1 char空间
    strncpy(p,s,i);//将s前i位赋给p
    p[i]=0;//最后一位补0
    return p;
}

/*与realloc一起用*/
{
      int i;
      char *p,*c,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 c=getchar()的c放进括号中,可这样输出putchar('\n');
gets()//得到一串字符数组,遇回车停,用于一串含空格的输入;
scanf(%s”,s)//得到一串数组,遇空格类停,感觉一段一段字符串输入不太好用,就感觉有什么地方不对,但又说不出来,学艺不精。

最后

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

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

上一篇:

下一篇: