傻瓜的指针

Fed*_*ile 4 c pointers function

我刚刚学了指针,我写了一个非常简单的程序来检查我理解的是否正确; 我的想法是创建一个简单的函数,它将输入作为整数值并返回其地址.

即使这应该是地球上最简单的事情,我在编译后会得到一条警告信息,我不知道为什么......

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

// returnType functionName(type arg1, type arg2)
int* return_me(int);

int main(){
    int  x = 1;
    int *p;

    p = &x;
    printf("p: %p\n", p);

    p = return_me(x);
    printf("p: %p\n", p);

    return 0;
}

int* return_me(int num){
     return &num;
}
Run Code Online (Sandbox Code Playgroud)

我应该得到相同的结果,但我不...我在哪里弄乱?

这是警告:

pointers.c: In function ‘return_me’:
pointers.c:21:2: warning: function returns address of local variable [-Wreturn-local-addr]
return &num;
Run Code Online (Sandbox Code Playgroud)

250*_*501 8

这条线

p = return_me(x);
Run Code Online (Sandbox Code Playgroud)

正在为函数中x的变量赋值num,类似于:

int num = x ;
p = &num ;
Run Code Online (Sandbox Code Playgroud)

num 是一个不同的变量,并具有不同的地址.

另请注意,当您从函数返回其地址时,本地变量num不再存在,并且未真正定义打印其地址.


像这样的东西:

int* return_me( int* pnum )
{
     printf("%d" , *pnum ) ;
     return pnum ;
}
Run Code Online (Sandbox Code Playgroud)