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;