#include <stdio.h>
int foo1(void)
{
int p;
p = 99;
return p;
}
char *foo2(void)
{
char buffer[] = "test_123";
return buffer;
}
int *foo3(void)
{
int t[3] = {1,2,3};
return t;
}
int main(void)
{
int *p;
char *s;
printf("foo1: %d\n", foo1());
printf("foo2: %s\n", foo2());
printf("foo3: %d, %d, %d\n", p[0], p[1], p[2]);
return 0;
}
これをgcc -ansi -pedantic -W -Wall
コンパイラーでコンパイルすると、foo2()およびfoo3()に対して警告メッセージが発行されます。
warning: function returns address of local variable
ローカル変数を返すことは許可されていないと思いましたが、foo1()は正常に機能し、ローカルオブジェクトへのポインターを返すこととオブジェクト自体に大きな違いがあるようです。
誰かがこの問題に光を当てることができますか?前もって感謝します!