次の例では、関数func()
は、ローカルポインタ変数〜main()
のアドレスをに戻します。それはGCCでうまくいきます。ローカルポインタ変数のアドレスをmain()関数に戻す
だから、よく定義された動作ですか?
#include <stdio.h>
#include <stdlib.h>
int *func(void);
int *func(void)
{
int *p;
p = malloc(sizeof *p);
*p = 10;
return p;
}
int main()
{
int *ptr = func();
printf("%d\n",*ptr);
return 0;
}
はいです。あなたはそれがそうではないと思わせるものは何ですか? "ポインタ変数のアドレス"ではなく "ポインタ変数の*値*"(もちろんアドレス)を返します。 –
@FelixPalmenは、func()とmain()関数内で同じポインタのアドレスを出力します。http://ide.geeksforgeeks.org/sULNzy – rsp
ポインタのアドレス**はありませんが、 *ポインタの値**。ポインタ**の**アドレスは 'func'の'&p'です。 'main'の'&ptr'です。もちろん、ポインタ**の**値**はアドレス**です(ポインタが指しているオブジェクトのアドレスです)。 –