c/c++中数组定义的问题!!劳烦高手帮忙看一下,谢啦

来源:百度知道 编辑:UC知道 时间:2024/06/17 00:59:16
c中规定数组的长度一定要事先定义好,不能用变量代替,能帮我看一下,下面使程序的一小段,为什么没有定义数组长度呢,能帮我解答一下吗,或者有哪些可能可以使这样的情况存在?
void BezierCurve::binomiaCoeffs(GLint n,GLfloat *c){

int k,i;

for(k=0;k<=n;k++){
//计算n!/(k!(n-k)!)
c[k]=1;
for(i=n;i>=k+1;i--)
c[k]*=i;
for(i=n-k;i>=2;i--)
c[k]/=i;
}

}

在栈上分配的数组的大小必须是个常数,如:
GLfloat c[100];

在堆上分配的数组,大小可以是个变量,如:
int n = 100;
GLfloat* c = (GLfloat*)malloc(n*sizeof(GLfloat));

通常,数组大小在程序运行时才能确定的,必须使用后者。但是也可以用第一种方法,建一个很大数组,保证总是够用,显然这样很浪费内存。

这个c是个指针变量,你该去看看指针和数组的联系和区别了

函数形参
void a(int n,int a[]) ==== void a(int n,int *p)

实参
int m[3];
int *p=m;
///////////////
a(3,m);
a(3,p);
数组名可等用指针 但还是需要把数组长度做参数传进去 否则越界就崩溃

没有问题 ,GLfloat *c 和 GLfloat c[] 都符合C语法规范

我认为这里c是指针,指向的应该是数组的首地址,而n则是数组的长度