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

时间:2013-11-26 13:51:12

标签: c arrays pointers

定义这样的函数时:

void  myFunction(arguments){
   // some instructions
}

使用type name[]type *name作为函数的参数之间的差异是什么。

使用type name[]并调用该函数时,它会复制到name数组或只指向传递的数组。

是否需要设置name数组的下标。如果没有区别的话。

3 个答案:

答案 0 :(得分:1)

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

void f(int array[]);

与传递const指针

同义
void f( int * const array);

当传递带边界的二维数组

时,它们变为非同义词
void f(int array[][n]);

的同义词
void f(int (* const array)[n]);

不同

void f(int **array);

答案 1 :(得分:1)

我的知识没有区别,在这种情况下实际上是一个问题:

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

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

答案 2 :(得分:-2)

在C ++中它是一样的。声明不同;

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