求个数组长度搞了一个多小时,以后如何见人

求个数组长度搞了一个多小时,以后怎么见人
是这样的,俺以前用过VC和java,要求个数组长度
没有java的length(),查了是sizeof(数组)/sizeof(数组里单元素)
就写了个内联函数,结果sizeof数组的结果总是4  用的unsigned short 好几年不用了,怎么加 & *都无济于事
请教了公司用C的人,他用define搞定了,但是要print却发现总有问题
------解决思路----------------------
sizeof(数组)里面的数组必须是数组本身或数组的引用。
------解决思路----------------------
目测你的数组是malloc出来的
------解决思路----------------------
引用:
目测你的数组是malloc出来的

如果真是malloc出来的,自己声明一个变量,记住数组的大小,并在进入处理该数组的函数中作为函数参数传入。
------解决思路----------------------
例子:
#include <stdio.h>

int main()
{
int *a =(int *) malloc(sizeof(int)*5);

printf("%d\n",*(a-4));  
return 0;
}

a-4的地方就是数组*sizeof int的大小
------解决思路----------------------
引用:
例子:
#include <stdio.h>

int main()
{
int *a =(int *) malloc(sizeof(int)*5);

printf("%d\n",*(a-4));  
return 0;
}

a-4的地方就是数组*sizeof int的大小

求个数组长度搞了一个多小时,以后如何见人非法访问内存了,这类的hacker技术结果有依赖于编译器对标库的实现.
可能可以在 VC 环境中得到结果,但在 gcc  clang  icc ..等等编译环境就错了.
------解决思路----------------------
求个数组长度搞了一个多小时,以后如何见人5楼的代码刁炸了。。。
#include<iostream>
void print(int a[]){
std::cout << sizeof(a) << std::endl;
//4,这里的a是数组指针,大小当然为4个字节
//一般如果需要知道大小,就把数组大小作为参数传入
}

int main(){
int a[20];
std::cout << sizeof(a)/sizeof(int) << std::endl;
//20,出这个结果是因为直接输出数组大小
print(a);
}

------解决思路----------------------
在C++ 中尽量不要想能计算出一个数组中元素的个数.  保存并传入大小, 是最安全的.
------解决思路----------------------
//static inline us array_length(us myarr[])
//{
//    printf("%d\n",sizeof(myarr));总是返回4  --- 数组退化成指针了~~~所以你这样计算是不对的 指针是LONG 所以是4
//    printf("%d\n",sizeof(us));
//    return sizeof(myarr)/sizeof(us);
//    
//}