【问题标题】:Syntax to pass an array to a function [duplicate]将数组传递给函数的语法[重复]
【发布时间】:2013-11-29 12:19:53
【问题描述】:

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

例如:

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

scanf("%s", &v);

【问题讨论】:

    标签: c arrays function pointers parameters


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      对于这种情况,你想把它称为

      scanf("%s", v);
      

      【讨论】:

        【解决方案3】:

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

        #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() 的正确表达式是第一个)。如果你想对它们执行一些算术指针,它们的类型不同。

        【讨论】:

          【解决方案4】:

          v&amp;v&amp;v[0] 类型不同,但值相同。

          • vchar[4] 类型; 4 个chars 的数组
          • &amp;vchar (*) [4] 类型;指向 4 个数组的指针 chars
          • &amp;v[0]char* 类型;指向char 的指针

          【讨论】:

            【解决方案5】:

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

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

            v[0](v+0) 相同,v[1](v+1) 相同等等。

            希望你能明白。

            【讨论】:

              猜你喜欢
              • 2014-01-10
              • 2014-05-09
              • 1970-01-01
              • 2011-06-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多