相同的sizeof操作在作为函数参数传入时给出不同的输出

时间:2016-07-27 01:53:22

标签: c sizeof

我正在学习使用以前Java经验的c编程。我一直在使用以下代码片段。

#include <stdio.h>
#include <string.h>

#define N 5


int d[7];

void fcn(int b[]) {
  printf("%d\n", sizeof b/sizeof b[0]);
  printf("%d\n", sizeof d/sizeof d[0]);
}

int main(int argc, char *argv[]) {

  int a[] = { 5, 6, 7, 8, 9 };
  int *b;
  int c[10];
  char cmd[20] = "hello";
  char cmd2[20];
  strcpy(cmd2, cmd);
  printf("%d\n", sizeof a);
  printf("%d\n", sizeof cmd);
  printf("%d\n", sizeof a/sizeof a[0] );
  fcn(a);
  fcn(d);
  b = a;
  //b++;b--;b--;

  //  b = 3;
  *(b+1) = 3;

  printf("N %d %d %d\n", sizeof b/sizeof b[0], *(b + 1), b[1] );
}

输出:

20
20
5
1
7
1
7
N 1 3 3

但是,当我在main方法中调用printf("%d\n", sizeof a/sizeof a[0] );时,会按预期提供5但是当我在void fcn(int b[])函数参数中给出它时,它会为1提供*(b + 1)同样的操作。为什么?我也不明白为什么1打印b[1]3打印b = a;。自从我说a[1]后,当我说b[1]时,6,{{1}},它不应该给我{?1}}

0 个答案:

没有答案