什么';这是C';如果丢弃长度数据,是否使用数组语法?
下面是一个示例程序:什么';这是C';如果丢弃长度数据,是否使用数组语法?,c,arrays,syntax,C,Arrays,Syntax,下面是一个示例程序: #include <stdio.h> void foo(int b[]){ printf("sizeof in foo: %i\n", sizeof b); } int main(){ int a[4]; printf("sizeof in main: %i\n", sizeof a); foo(a); } 问题是,如果它只是转换成函数边界处的标准指针,那么这种语法有什么意义 这是语法上的甜点:voidfoo(intb[])
#include <stdio.h>
void foo(int b[]){
printf("sizeof in foo: %i\n", sizeof b);
}
int main(){
int a[4];
printf("sizeof in main: %i\n", sizeof a);
foo(a);
}
问题是,如果它只是转换成函数边界处的标准指针,那么这种语法有什么意义
voidfoo(intb[])
表明b
将被用作数组(而不是单独的参数),即使它实际上是一个指针[]
中遗留下来的,postfix是指针声明的语法简而言之,
[]
可以帮助您更好地完成指针运算。在声明数组的情况下,可以对其进行优化-这就是为什么数组不是指针,尽管它们在某些情况下(而不是在其他情况下)是通过指针访问的。@Mehrdad:不一定。语法糖会导致分号癌。@larsmans你们想到的是合成语法糖@拉斯曼:对不起,我是指你的评论。我是在开玩笑。@SanJacinto:没听懂这个笑话,我的坏:)谢谢,我只是觉得现在的编译器可能会更聪明一点,而且实际上会传递额外的信息(因为在本例中,sizeof是在编译时计算的)。但是,如果没有smart标准,就不能使用smart编译器:/You know,如果您提前知道大小,您可以声明void foo(int b[4])
。@Kevin这没有任何区别,您仍然可以将长度不是4的数组传递给foo
。如果只允许长度为4的数组foo
必须是void foo(int(*b)[4])
sizeof in main: 16
sizeof in foo: 8