C语言函数 数组作为参数,,在函数里中无法计算传进来的数组长度求指教,

为什么我打印数组a的长度总是4而不是20#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<ti... 为什么我打印数组a的长度总是4而不是20

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>

// 专门打印数组的函数
void printArr(int *a)
{
// int length = sizeof(a) / sizeof(int);// get the length of this arr

printf("the size is %d", sizeof(a));
/*for (int i = 0; i < length;i++)
{
printf("%d \n",a[i]);
}*/

}
void main()
{
// 产生随机数种子
time_t tms;
int a[5];// 数组的创建
srand(
(unsigned int )time(&tms));// 注意 : z这里传的是地址

// 初始化数组
for (int i = 0; i < 5;i++)
{
a[i] = rand()%100+100;// 产生100--200 的随机数
}

// 输出数组
printArr(a);

getchar();
}
展开
 我来答
kaixingui2012
推荐于2017-09-27 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6410万
展开全部
整型数组作为参数传递时,无法在子函数获得其长度!
只有字符串可以,因为它有一个尾巴标识(‘\0’)!

所以,整型的数组长度,必须与数组名一同传递到子函数才可以!
追问
char b[15] = { 'a', 'b', 'c', 'e', 'a','a', 'b', 'c', 'e', '\0' }; 这个好像也不可以   求完整的解决方案
追答
你这个也有结束符啊,如果你能规定 一个特殊数值作为整数的结束符,则传整型数组也能做到。
earthweiyc
2014-11-10
知道答主
回答量:21
采纳率:0%
帮助的人:17.2万
展开全部
你传入的是一个指针,并不是一个数组。这个指针的长度就是4。
追问
求一个解决方案啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Hushuhua1997
2018-04-07
知道答主
回答量:2
采纳率:0%
帮助的人:1446
展开全部
如果你把参数改成char a[ ]就ojbk了,char *a中a是一个指针,sizeof得出的是4,因为指针类型就是大小4,而char a[ ]中a是一个静态数组,sizeof函数得到的是数组的容量5,这是sizeof这样定义的,而且sizeof求结构体的时候,又返回结构体的实际大小,你可能觉得疑惑,就请百度sizeof用法后再来想这个问题(建议对照strlen你会理解的更好),还有一个补充,sizeof是一个运算符不是函数哦。都写到这啦,再说点别的,善用结构体,深入理解指针,二重指针,数组,一定对你有帮助,因为操作系统(linux)就是c和汇编写的,数据结构与算法也主要考c的一些算法函数,学号c语音不容易,那些响当当的公司都是优先看你数据结构算法,数据库,操作系统等的功底,是不是扯远了。。。。点个赞呗第一次回复有点激动\(≧▽≦)/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式