扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
1、c语言中,定义数组后可以用sizeof命令获得数组的长度(即可容纳元素个数)。但是通过传递数组名参数到子函数中,以获得数组长度是不可行的,因为在子函数当中,数组名会退化为一个指针。
创新互联服务项目包括奇台网站建设、奇台网站制作、奇台网页制作以及奇台网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,奇台网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到奇台省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
2、例如:
int data[4],length;
length=sizeof(data)/sizeof(data[0]); //数组占内存总空间除以单个元素占内存空间大小,即等于元素个数
printf("length of data[4]=%d", length ); //输出length of data[4]=4
先获取数组长度,然后用for循环,从数组中获取值进行累加求和。
#include
#include
int main()
{
int n;
int val;
int * a;
int sun = 0, i;
printf("请输入数组的长度:");
scanf("%d", n);
printf("\n");
a = (int *)malloc(n * sizeof(int));//为数组a动态分配内存
for(i = 0; i n; i++)
{
printf("请输入数组的第%d个元素的值:", i+1);
scanf("%d", val);
printf("\n");
a[i] = val;
}
for (i = 0; i n; i++)
{
sun+=a[i];//sun+=a[i]相当于sun=sun+a[i];
}
printf("sun = %d\n",sun);
free(a);//释放a动态分配的内存
return 0;
}
扩展资料:
一个数组中的所有元素具有相同的数据类型(在C、C++、Java、pascal中都这样。但也并非所有涉及数组的地方都这样,比如在Visual Foxpro中的数组就并没这样的要求)。当然,当数据类型为 Variant 时,各个元素能够包含不同种类的数据(对象、字符串、数值等等)。可以声明任何基本数据类型的数组,包括用户自定义类型和对象变量。
如果要用户输入的是一个数组,一般是用一个循环,但是在输入前也需要固定数组的大小。
compact跟变长数组没有太大的关系,也应该用不到变长数组。因为一般的传数组到函数中就是传数组的地址和元素的个数的,那只是一个提示,不是要求。
参考资料来源:百度百科-数组
定义int arr[5] = {20, 10, 5, 39, 88};时,系统产生一个有5个元素的一维数组,5个元素分别是arr[0]到arr[4],对应的各个元素的地址分别是arr到arr+4。
当用sum(arr, arr + 5));计算数组总和时,sum是一个自定义函数,其内容是由编程人书写的。
如果这个函数是这样写:
int sum(int*a,int*b){
int*p,s;
for(p=a,s=0;pb;p++)
s+=*p;
return s;
}
就能得到正确的结果。
你说的“arr指向数组的首地址”是正确的,但“对arr+5后不是相当于arr[6]了吧”是错误的,因为arr+5是元素arr[5]的地址。但即使这样,如果自定义函数不加arr[5](像上面的例子),程序是能够得到正确的结果的。但是,如果不这样写,可能会造成这样数组下标越界。
这取决于函数sum是怎样写的。
最主要的,sum后面的arr与arr+5,只是两个参数,并不是加法的对象,这一点一定要搞清楚。
数组的下标是从0开始的,并非从1
因此假设定义数组int a[3],那么有效的数组元素为a[0] a[1] a[2]
楼组的代码里面的数组从1开始使用,输入3*3的数组会导致越界,踩内存发生错误
void fun(int arr[M][N])
{
int i,j;
for(i=1;i=M;i++) //应该是for(i=0;iM;i++)
for(j=1;j=N;j++)
scanf("%d",arr[i][j]);
}
其他也按照这个修改就可以了
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流