我确定知道
function(int *a); function(int a[]);
在 C 语言中,数组名作为函数参数时,在翻译成指针类型时与 int *a 相同。
int *a = malloc(20);
int b[] = {1,2,3,4,5};
这两者并不相同,第一个是指针,第二个是数组。当我调用函数(function(int *a))时会发生什么?我知道b在栈上,那它是如何传递给那个函数的呢?
其次,字符串:
char *c1 = "string";
char c2 [] = "string";
在这种情况下,我不知道c1在哪里,而我假设c2在堆栈上。
假设函数现在是:function(char *c),与function(char c[])相同,当我调用function(c1)和function(c2)时,字符串会按引用传递还是按值传递?
在这种情况下,我不知道c1的位置,我认为c2位于堆栈上。 假设现在函数是:function(char *c),与function(char c[])相同,当我调用function(c1)和function(c2)时,字符串将被按引用传递还是按值传递?
gcc -Wall -fverbose-asm -S yourfile.c
进行编译,然后查看yourfile.s
。 - Basile Starynkevitch