中文解释:使用sizeof得到的并不是整个数组的字节数,而是指针的字节数,是int*指针的大小(数组被退化为指针使用sizeof)
错误代码:
void getNextArr(char* ps,int next[])
{
int length=sizeof(next)/sizeof(next[0]);
...
...
...
}
sizeof(next)这句话会报警告,告诉我们‘sizeof’ on array function parameter ‘array’ will return size of ‘int*’。
原因:
数组作为参数传给函数时,是传给数组首个元素的地址,而不是传给整个的数组空间。什么意思呢?就是说形参拿到的是指针的内存空间,是指针的字节数,是int*指针的大小,所以我们不能通过上文的sizeof方式获取到数组大小了。
解决方法:在创建int数组的时候,就得同时计算出数组长度然后传给函数。
void getNextArr(char* ps,int next[],int length)
{
use arg:length In method chunk
...
...
...
}
int main()
{
char* p="abab";
int strLength=strlen(p);
int* next=new int[strLength];//moreover->sizeof(next)/sizeof(next[0])
getNextArr("abab",next,strLength);
...
...
...
}