n1のメモリ番地を実行した後、n2、* pnはADDR:0061FF2C、0061FF28、0061FF24となりました。 1)、2)、3)の実行後に変更されますか?私はすべてのコードに対してprintfを書いていますが、変更されていないようです。理論的には、変数に新しい値が割り当てられているため、変数を変更しないでください。新しい宣言後にメモリアドレスが変更されますか?
#include <stdio.h>
int main(void)
{
int n1=3, * pn = &n1;
int n2=0;
printf("%p, %p, %p\n", &n1, &n2, &pn); // 0)
n2 = *pn; // 1)
*pn = n2 + 1; // 2)
n1 = *pn + *(&n2); // 3)
printf("%d, %d, %d\n",n1,n2,*pn); // 4)
return 0;
}
O/T - 'printf'が予期しているようにそれらのアドレスを' void * 'にキャストする必要があります。そうでない場合は未定義の動作です:https://stackoverflow.com/questions/9053658/correct-format-specifier-to-print-ポインタアドレス – yano