【发布时间】:2018-05-08 04:03:43
【问题描述】:
考虑这段代码sn-p:
void foo(int a[], int b[]){
static_assert(sizeof(a) == sizeof(int*));
static_assert(sizeof(b) == sizeof(int*));
b = a;
printf("%d", b[1]);
assert(a == b); // This also works!
}
int a[3] = {[1] = 2}, b[1];
foo(a, b);
输出(无编译错误):
2
我不明白为什么b = a 是有效的。即使数组可能会衰减为指针,但它们不应该衰减为 const 指针吗(T * const)?
【问题讨论】:
-
a和b实际上并不是数组。 -
您可能遇到了未定义的行为,听起来像是 b 值的泄漏。
-
您的代码中没有数组赋值。
a和b不是数组。 -
“它们不应该衰减为 const 指针吗” 你猜到了吗?
标签: c arrays variable-assignment function-parameter