将数组传递给函数的语法

时间:2013-11-29 12:19:53

标签: c arrays function pointers parameters

我有一个“v”数组,我想传递给一个函数。 “v”和“& v”是等价的还是它们之间有什么区别?

例如:

char v[4]
scanf("%s", v);

scanf("%s", &v);

5 个答案:

答案 0 :(得分:2)

vv[0]的地址,&v是整个数组的地址。幸运的是两者都具有相同的价值。但是这些指针的任何算法都会以不同的方式访问。例如

(v+1)(&v + 1)不相同。

答案 1 :(得分:1)

scanf期望与%s对应的参数的类型为char *;表达式&v将具有类型char (*)[4]。即使相同,类型也会不同,类型也很重要。

对于这种情况,您想将其称为

scanf("%s", v);

答案 2 :(得分:1)

您可以随时询问编译器本身......:

#include <stdio.h>

int main()
{
    char v[4];

    printf ("   v         &v      &v[0]\n");
    printf ("%p  %p  %p\n", v, &v, &v[0]);
    printf ("%p  %p  %p\n", v+1, &v+1, &v[0]+1);
    return 0;
}

使用MinGW2.95,打印以下内容:

   v         &v      &v[0]
0240FF24  0240FF24  0240FF24
0240FF25  0240FF28  0240FF25

如您所见,这三个表达式为基本数组地址生成相同的值,因此它们可以与scanf()一起使用(尽管我同意scanf()的正确表达式是第一个) 。如果你想对它们执行一些算术指针,它们的类型不一样。

答案 3 :(得分:0)

是如果你想知道数组的基地址,那么你可以写v即它会给出

array.and&amp; v中第一个元素的地址将给出完整数组的地址。

v[0](v+0)相同,v[1](v+1)相同,依此类推。

希望你明白。

答案 4 :(得分:0)

v&v&v[0]因类型而异,但价值却相同。

  • v的类型为char[4];数组4 char s
  • &v的类型为char (*) [4];指向4 char s
  • 数组的指针
  • &v[0]的类型为char*;指向char
  • 的指针