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

为什么我打印数组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();
}

整型数组作为参数传递时,无法在子函数获得其长度!
只有字符串可以,因为它有一个尾巴标识(‘\0’)!

所以,整型的数组长度,必须与数组名一同传递到子函数才可以!追问

char b[15] = { 'a', 'b', 'c', 'e', 'a','a', 'b', 'c', 'e', '\0' }; 这个好像也不可以 求完整的解决方案

追答

你这个也有结束符啊,如果你能规定 一个特殊数值作为整数的结束符,则传整型数组也能做到。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-10
你传入的是一个指针,并不是一个数组。这个指针的长度就是4。追问

求一个解决方案啊

第2个回答  2018-04-07
如果你把参数改成char a[ ]就ojbk了,char *a中a是一个指针,sizeof得出的是4,因为指针类型就是大小4,而char a[ ]中a是一个静态数组,sizeof函数得到的是数组的容量5,这是sizeof这样定义的,而且sizeof求结构体的时候,又返回结构体的实际大小,你可能觉得疑惑,就请百度sizeof用法后再来想这个问题(建议对照strlen你会理解的更好),还有一个补充,sizeof是一个运算符不是函数哦。都写到这啦,再说点别的,善用结构体,深入理解指针,二重指针,数组,一定对你有帮助,因为操作系统(linux)就是c和汇编写的,数据结构与算法也主要考c的一些算法函数,学号c语音不容易,那些响当当的公司都是优先看你数据结构算法,数据库,操作系统等的功底,是不是扯远了。。。。点个赞呗第一次回复有点激动\(≧▽≦)/
相似回答