我想知道为什么当我将数组传递给函数时,例如用于初始化,它们实际上被初始化了。由于inic函数中的变量与main函数中的变量完全独立(没有涉及指针),那么inic函数如何能够初始化数组v的值?数组s在inic函数内部不是一个独立的东西吗?
#include <stdio.h>
void inic(int s[], int n)
{
int i;
for(i=0; i<n; i++)
s[i]=0;
}
main()
{
int v[10];
int x[20];
inic(v, 10);
inic(x, 20);
}
如果我展示以下这个例子,可能会更加清晰:
#include <stdio.h>
void value(int n)
{
n = 2;
}
main()
{
int x=1;
value(x);
printf("X is %d\n", x); //The output would be 1. The function *value* doesn't affect X.
}
那么为什么数组的情况不同呢?
s[i]=0;
和n = 2;
之间。在第二种情况下,您正在对变量进行赋值,但在第一种情况下,您正在对变量指向的值进行赋值。 - Ajay Brahmakshatriya&
、一元sizeof
或用于初始化数组对象的初始化器中的字符串字面量),否则数组表达式将被转换为指针表达式。函数参数只是许多上下文中的一个,其中数组表达式被转换为指针表达式。还有一个单独的规则:用数组类型定义的参数实际上是指针类型。 - Keith Thompson