一个奇怪的问题
我的length会在程序运行中无缘无故改变值
下面是问题代码
`#include<stdio.h>
#include<windows.h>
void HeapAdjust(int *a,int s,int length);
void swap(int *a,int m,int n);
int main(){
int a[] = {99,19,2,98,103,3,9,20,78,201,88,9,23,46,77,59,67,69,75,38};
/* 这里的length似乎不用const的话就会发生错误,bug? */
int length = sizeof(a)/sizeof(a[0]);
for(int i=length/2;i>=0;i--)
{
HeapAdjust(a,i,length);
}
for(int i=length;i>0;i--)
{
swap(a,0,i-1);
HeapAdjust(a,0,i-2);
}
/* Show the result of Heap_sort */
for(int i=0;i<length;i++)
{
printf("%d ",a[i]);
}
system("pause");
}
void HeapAdjust(int *a,int s,int length)
{
int temp = a[s];
for(int j=s2;j<=length;j=2)
{
if(j<length&&a[j+1]>a[j])
j++;
if(temp>=a[j])
break;
a[s] = a[j];
s = j;
}
a[s] = temp;
}
void swap(int *a,int m,int n)
{
int temp = a[m];
a[m] = a[n];
a[n] = temp;
}`
在我的计算机上,如果不加const,length会变成3,但是加了const又不会如此,这是什么原因?