求个数组长度搞了一个多小时,以后如何见人
求个数组长度搞了一个多小时,以后怎么见人
是这样的,俺以前用过VC和java,要求个数组长度
没有java的length(),查了是sizeof(数组)/sizeof(数组里单元素)
就写了个内联函数,结果sizeof数组的结果总是4 用的unsigned short 好几年不用了,怎么加 & *都无济于事
请教了公司用C的人,他用define搞定了,但是要print却发现总有问题
------解决思路----------------------
sizeof(数组)里面的数组必须是数组本身或数组的引用。
------解决思路----------------------
目测你的数组是malloc出来的
------解决思路----------------------
如果真是malloc出来的,自己声明一个变量,记住数组的大小,并在进入处理该数组的函数中作为函数参数传入。
------解决思路----------------------
例子:
a-4的地方就是数组*sizeof int的大小
------解决思路----------------------
非法访问内存了,这类的hacker技术结果有依赖于编译器对标库的实现.
可能可以在 VC 环境中得到结果,但在 gcc clang icc ..等等编译环境就错了.
------解决思路----------------------
5楼的代码刁炸了。。。
------解决思路----------------------
在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);
//
//}
是这样的,俺以前用过VC和java,要求个数组长度
没有java的length(),查了是sizeof(数组)/sizeof(数组里单元素)
就写了个内联函数,结果sizeof数组的结果总是4 用的unsigned short 好几年不用了,怎么加 & *都无济于事
请教了公司用C的人,他用define搞定了,但是要print却发现总有问题
------解决思路----------------------
sizeof(数组)里面的数组必须是数组本身或数组的引用。
------解决思路----------------------
目测你的数组是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的大小
------解决思路----------------------
可能可以在 VC 环境中得到结果,但在 gcc clang icc ..等等编译环境就错了.
------解决思路----------------------
#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);
//
//}