以下代码有效:
int main()
{
void foo(int);
foo(3);
return 0;
}
void foo(a) int a;
{
printf("In foo\n");
}
Run Code Online (Sandbox Code Playgroud)
但这个没有:
int main()
{
void foo(float);
foo(3.24);
return 0;
}
void foo(a) float a;
{
printf("In foo\n");
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
为什么作为函数参数传递的数组的a和&a的值不同?b和&b对于函数体内定义的数组没有区别.代码如下:
void foo(int a[2])
{
int b[2];
printf("%p %p\n", a, &a);
printf("%p %p\n", b, &b);
}
int main()
{
int a[2];
foo(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
所以,经过所有的讨论,我了解到以下情况:
在main():
int a[2]; /* define an array. */
foo(a); /* 'a' decays into a pointer to a[0] of type (int*). */
/* since C is pass-by-value, this pointer is replicated and */
/* a local copy of it is stored on the stack for use by foo(). */
Run Code Online (Sandbox Code Playgroud)
在foo(): …
我已经声明了一个长度为N的数组(假设).现在,我使用循环为这个数组的元素赋值(循环变量用作数组的索引).代码如下:
int main()
{
int arr[4], j;
for(j=0; j<10; j++)
{
printf("%d\n", j);
arr[j] = 0;
sleep(1);
printf("%d\n\n", j);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我期望输出为0 1 2 .. 9.但实际发生的是,当赋值arr [N + 2] = 0(arr [6] = 0,在这种情况下)执行时,j被重置为0循环.这里到底发生了什么?我错过了什么吗?
我试图将可变大小的2D数组传递给函数来打印它.我知道当一个固定大小的数组时它是如何完成的.但是如何使用可变大小的数组做到这一点?这里有一些代码可以让你知道我想要做什么:
void print_grid(char (*g)[9], int size) // the array subscript (9 here) be variable
{
int i, j;
for (i=0; i<size; i++)
{
for (j=0; j<size; j++)
printf("%c ", g[i][j]);
printf("\n");
}
}
Run Code Online (Sandbox Code Playgroud)
我将使用以下代码调用此函数:
char a[3][3], b[9][9];
// assign a, b
print_grid(a, 3);
print_grid(b, 9);
Run Code Online (Sandbox Code Playgroud)
如果没有在print_grid()中分配任何动态内存,有没有办法做到这一点?