对于一个任意类型数组长度的获取,可以这样:
#include "stdafx.h"
int main()
{
int Array[10];
printf("%d\n", sizeof(Array) / sizeof(Array[0]));
return 0;
}
输出是10。
在获取函数的形参数组长度时,又成了这样:
#include "stdafx.h"
int getSize(int Array[])
{
return sizeof(Array) / sizeof(Array[10]);
}
int main()
{
int Array[10];
printf("%d\n", getSize(Array));
return 0;
}
在这里输出成了1,很奇怪…
经过考证,结论如下:
sizeof的参数是数组名的时候,是可以得到实际的数组所占字节数的。但是在数组作为函数形参传入函数时,数组退化为了指针,所以第二个实验的sizeof(Array)等价于sizeof(&Array[0]),本实验是在windows下运行,所以得到的结果是4字节,最终得到的结果是1。
终于明白为什么在函数的设计中,有的函数的形参一定要给出数组的长度了。
对于这样的动态数组:
#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
int main()
{
int* Pointer;
Pointer = (int*)malloc(sizeof(int)* 10);
memset(Pointer, 0, 10);
return 0;
}
我没有想到有什么特别好的办法去获取他的长度。
能不能通过读出越界的数据是个非常大的值这一特征来确定呢?感觉不太靠谱。
|