我正在学习使用以前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}}