#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() работает отлично, и кажется, что существует огромная разница между возвращающим указателем на локальный объект и сам объект.
Может кто-нибудь пролить свет на эту проблему? Спасибо заранее!