c语言带长数组的函数 c语言中数组长度函数

C语言定义一个函数如果含有数组

void min(int a[],int x) //int x是用来标记传过来的数组的长度(即a数组指向的那个数组的长度)。

成都创新互联公司专业为企业提供新乡县网站建设、新乡县做网站、新乡县网站设计、新乡县网站制作等企业网站建设、网页设计与制作、新乡县企业网站模板建站服务,十年新乡县做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

因为你在函数中计算的时候,a只能当做一个指针来用,没有具体的长度,而且你是int 型的,所以没有标准库函数来求你需要计算的数组的长度,所以你就没法计算。

void min(int a[],int b[])这样计算没错误,但是在计算的时候,你要知道a所指向的数组的长度和b所指向的长度,例如下面的例子:

a数组中有10个数,b数组中有2个数,a数组的大小是40个字节,而指向他的c数组大小只有4个字节,所以当你运算的时候,你要知道c指向的a数组的大小,同理,d也是一样。

#include"stdio.h"

#include"string.h"

void min(int c[],int d[])

{

int i,j=0;

int e[100]={0};

printf("c=%d\n",sizeof(c));

for(i=0;i10;i++) //a数组中有10个数

e[j++]=c[i];

for(i=0;i2;i++) //b数组中有2个数

e[j++]=d[i];

for(i=0;e[i];i++)

printf("%d\t",e[i]);

}

main()

{

int a[10]={1,2,3,4,5,6,7,8,9,10};

int b[2]={3,4};

printf("a=%d\n",sizeof(a));

min(a,b);

}

怎么用C语言定义一个无限长的数组?

C语言支持定义一个不显式定义长度的数组,即通过初始化数据来分配数组长度。

比如int a[] = {1,2,3,4,5}; 数组a的长度没有显式给出,由于有5个初始化数据,所以分配空间长度为5个int型。

但是无论如何定义,数组的长度都是固定的,在定义的时候就已经分配好空间,从这个角度上C语言无法定义无限长的数组。但很多实际应用中又事先无法确定数组的长度,对于这类情况,一般有两种方法可以使用。

1 由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。

通过下面例子来理解该方法:

#include stdio.h

#include stdlib.h

int main()

{

int size=100;//最初为100个元素空间。

int *a = NULL;

int i = 0;

a = malloc(sizeof(int) * size);

if(a == NULL) return -1;

while(scanf("%d", a+i) == 1)//循环向a中输入数据,直到输入非数值字符为止

{

i++;

if(i == size)//数组空间不足

{

size *=2; //将数组空间扩大二倍, 也可以改用size+=100;之类的操作,使size每次增加固定值。

a=realloc(a,size);//分配新的空间

if(a==NULL)

{

return -1;//这种情况下运行载体(如PC)内存不足以提供,中断程序。

}

}

}

if(a) free(a);//对申请的内存进行释放。

return 0;

}

从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。 直到占满所有剩余空间。

如果到占满所有空间还是无法存下数据,那么是硬件无法支持了。

所以这种方法可以做到软件意义上的无限大数组空间。

但是这种方法代码量比较大,而且需要频繁的进行内存的分配,如果实现知道数据的最大可能规模,那么可以用另一个方法。

2 事先知道数据的最大规模,比如统计一个班的分数时,一个班最多不超过百人,那么可以直接定义一个长度为100的数组,或者保险起见,定义一个长度为1000的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。

c语言中如何求数组长度

1、c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数)。

例如:

int data[4];

int length;

length=sizeof(data)/sizeof(data[0]);  //数组占内存总空间,除以单个元素占内存空间大小

printf("length of data[4]=%d", length ); //输出length of data[4]=4

2、但是,通过传递数组名参数到子函数中,以获得数组长度是不可行的。

例如:

int getLength(int[] a){

int length;

length=sizeof(a)/sizeof(a[0]); //这样是错误的,得到的结果永远是1

return length;

}

因为,a是函数参数,到了本函数中,a只是一个指针(地址,系统在本函数运行时,是不知道a所表示的地址有多大的数据存储空间,这里只是告诉函数:一个数据存储空间首地址),所以,sizoef(a)的结果是指针变量a占内存的大小,一般在32位机上是4个字节。a[0]是int类型,sizeof(a[0])也是4个字节,所以,结果永远是1。

3、因此,获得数组长度,只能在数组定义所在的代码区中,采用以上方法,才可以达到效果。


名称栏目:c语言带长数组的函数 c语言中数组长度函数
链接地址:http://pwwzsj.com/article/doshhgi.html