test.c中的代码

#include <stdio.h>
#include <stdlib.h>

int* test()
{
    int *new = malloc(sizeof(int));
    printf("test.c输出:%p\n",new);
    return new;
}

main.c中的代码

#include <stdio.h>

int main(void)
{    
    int*p = test(); 
    printf("main.c输出:%p\n",p);
}

输出结果

test.c输出:0x1005042a0
main.c输出:0x5042a0

想了一晚上没搞明白为什么同一个地址,子函数和主函数里输出结果会不同?

后来在main.c加上test()函数的声明,好了…

#include <stdio.h>

int* test();
int main(void)
{    
    int*p = test(); 
    printf("main.c输出:%p\n",p);
}

输出结果

test.c输出:0x100508790
main.c输出:0x100508790

在C语言中,函数在调用前不一定非要声明。如果没有声明,那么编译器会自动按照一种隐式声明的规则,为调用函数的C代码产生汇编代码。比如上面test()会默认声明为:

int test();

隐式声明默认返回值为int,若你的函数返回值不是int,就会出现一些莫名其妙的错误。

posted @ 2020-06-20 21:18:40
评论加载中...

发表评论