【发布时间】:2020-06-07 10:18:51
【问题描述】:
第一个代码 a[0] 变成 31,但在第二个代码 a 仍然是 55。有人可以解释一下区别吗?在函数中更改变量和数组的值有什么区别?
#include <stdio.h>
int h(int x[]);
int main()
{
printf("Hello, World!\n");
int a[0] = 55;
h(a);
printf("%d", a[0]);
return 0;
}
int h(int x[]) {
x[0] = 31;
}
#include <stdio.h>
int h(int x);
int main()
{
printf("Hello, World!\n");
int a= 55;
h(a);
printf("%d", a);
return 0;
}
int h(int x) {
x = 31;
}
那么这段代码呢?此数组已更改。我真的很困惑。
#include <stdio.h>
int h(int x[], int length);
int main()
{
int i;
int a[]= {5, 5, 5, 5};
h(a, 4);
printf("Array After Function Call\n");
for(i = 0; i < 4; i++) {
printf("%d ", a[i]);
}
return 0;
}
int h(int x[], int length) {
int i;
for(i = 0; i < length; i++) {
x[i] += x[i];
}
printf("Array in Function\n");
for(i = 0; i < length; i++) {
printf("%d ", x[i]);
}
printf("\n");
return 0;
}
【问题讨论】:
-
int a[0]是 零 个元素的数组。括号内的值是大小,元素个数,而不是顶部索引的值。 -
int a[0] = 55;在标准 C 中是不允许的(不允许使用零大小的数组;数组只能由大括号括起来的列表初始化)。建议将您的编译开关更改为在标准模式下运行 -
@chux-ReinstateMonica 删除了我的评论。混淆了
a[0]和a[]。我将在链接的答案中添加评论。