c中作为函数参数的数组和指针之间的差异

c中作为函数参数的数组和指针之间的差异,c,arrays,pointers,C,Arrays,Pointers,定义这样的函数时: void myFunction(arguments){ // some instructions } 使用type name[]和type*name作为函数参数有什么区别 当使用type name[]并调用函数时,它是复制到name数组还是只指向传递的数组 是需要设置的名称数组的下标。如果没有,有什么区别。无论哪种方式,都只传递一个指针 void f(int array[]); 是传递常量指针的同义词 void f( int * const array); 当传

定义这样的函数时:

void  myFunction(arguments){
   // some instructions
}
使用type name[]和type*name作为函数参数有什么区别

当使用type name[]并调用函数时,它是复制到name数组还是只指向传递的数组


是需要设置的名称数组的下标。如果没有,有什么区别。

无论哪种方式,都只传递一个指针

void f(int array[]);
是传递常量指针的同义词

void f( int * const array);
当传递有边界的二维数组时,它们就不再是同义词了

void f(int array[][n]);
是同义词

void f(int (* const array)[n]);
但不同于


就我所知,在这种情况下,这实际上是一个问题:

int func(int a[20]) {
    sizeof(a); // equals sizeof(int*)!!
}

因此,我总是喜欢指针形式,因为数组的形式会引起微妙的混淆。C++中的

< P>是相同的。不同的是在宣言

char *s = "String"; // allocated and fill
char str[80];      // allocated memory
char *p1;          // not allocated memory
p1 = str;

@Kerrek_SB这不是同一个问题。int array[][n]是指向int的指针数组,其中int**array是指向指向int的指针。是这样吗?@rullof int array[][n]是指向未定义数量的n int数组的数组的数组,指向单个内存块。而int**array是指向int的指针数组,每个指针都可以指向它自己的单独内存块,内存块中包含未定义的int。对于第一个,你是对的,它是未定义的int,而不是int数组。第二个int**array我不这么认为,它只是指向int的指针。array只是名称,否则您的意思是其他东西int-array[]参数未调整为int*const-array。它只是int*数组;没有常数。如果参数是int array[const],那么它将被调整为int*const array。根据C 2011 N1570 6.7.6.3 7:“作为“类型数组”的参数声明应调整为“类型合格指针”,其中类型限定符(如有)是数组类型派生的[和]中规定的。”这是错误的。埃里克是对的。数组是int*这个答案中的语句是关于块内的声明。问题是函数参数,它们的行为不同。
char *s = "String"; // allocated and fill
char str[80];      // allocated memory
char *p1;          // not allocated memory
p1 = str;