魔法虫虫 发表于 2018-5-16 16:16:23

函数传参问题

#include <stdio.h>

void func(int b[]);

void func(int b[])
{
      printf("%d\n", b);
}

int main(void)
{
      int a = {
                {1, 2, 3, 4},
                {5, 6, 7, 8},
                {9, 10, 11, 12}
      };

      func(a);

      return 0;
}
这道题答案怎么会是是“9”?有点不明白

BngThea 发表于 2018-5-16 16:36:18

因为函数形参中的第二维是3,所以你传入的数组变成了
b = {{1,2,3},
      {4,5,6},
      {7,8,9},
      {10,11,12}}
那么b就是9

魔法虫虫 发表于 2018-5-16 16:39:09

BngThea 发表于 2018-5-16 16:36
因为函数形参中的第二维是3,所以你传入的数组变成了
b = {{1,2,3},
      {4,5,6},


哦哦,明白了,谢谢

ABC23 发表于 2018-5-16 16:50:31

本帖最后由 ABC23 于 2018-5-16 16:56 编辑

你这个函数调用是错的。
==============

int b[],相当于 int (*),3个元素的一维数组,存储指向每一行那三个元素的指针变量。


void func(int b[])
{
        printf("%d\n", b);
}

int main(void)
{
        int a={
                {1, 2, 3, 4},
                {5, 6, 7, 8},
                {9, 10, 11, 12}
        };

        func(a);

        return 0;
}

改成这样就能输出11了。

1 warning generated.
11
如果用来写,会产生一个warning。
页: [1]
查看完整版本: 函数传参问题