c语言带长数组的函数 c语言带长数组的函数有哪些

c语言中如何求数组长度1、c语言中c语言带长数组的函数,定义数组后可以用sizeof命令获得数组c语言带长数组的函数的长度(可容纳元素个数) 。
例如:
int data[4];
int length;
length=sizeof(data)/sizeof(data[0]);//数组占内存总空间c语言带长数组的函数,除以单个元素占内存空间大小
printf("length of data[4]=%d", length ); //输出length of data[4]=4
2、但是 , 通过传递数组名参数到子函数中 , 以获得数组长度是不可行c语言带长数组的函数的 。
例如:
int getLength(int[] a){
int length;
length=sizeof(a)/sizeof(a[0]); //这样是错误的,得到的结果永远是1
return length;
}
因为,a是函数参数,到c语言带长数组的函数了本函数中,a只是一个指针(地址,系统在本函数运行时,是不知道a所表示的地址有多大的数据存储空间 , 这里只是告诉函数:一个数据存储空间首地址),所以,sizoef(a)的结果是指针变量a占内存的大小 , 一般在32位机上是4个字节 。a[0]是int类型,sizeof(a[0])也是4个字节,所以,结果永远是1 。
3、因此,获得数组长度 , 只能在数组定义所在的代码区中,采用以上方法,才可以达到效果 。
C语言,数组用什么函数,计算数组长度没有这样的函数,因为C语言面向的是程序员,所有程序内部逻辑要程序员自己控制,数组是否越界的判断要交给程序员自己做 。
如果是字符串,可以使用strlen函数计算字符串长度,不包含最后的结束符 。
C语言定义一个函数如果含有数组void min(int a[],int x) //int x是用来标记传过来的数组的长度(即a数组指向的那个数组的长度) 。
因为c语言带长数组的函数你在函数中计算的时候,a只能当做一个指针来用,没有具体的长度 , 而且c语言带长数组的函数你是int 型的,所以没有标准库函数来求你需要计算的数组的长度 , 所以你就没法计算 。
void min(int a[],int b[])这样计算没错误,但是在计算的时候,你要知道a所指向的数组的长度和b所指向的长度,例如下面的例子:
a数组中有10个数,b数组中有2个数 , a数组的大小是40个字节,而指向c语言带长数组的函数他的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语言带长数组的函数 c语言带长数组的函数有哪些】关于c语言带长数组的函数和c语言带长数组的函数有哪些的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读