1

ポインター変数が指しているアドレスではなく、ポインター変数のアドレスを出力しようとしていましたが、誰かがそれを達成するのを手伝ってくれますか?以下は私が試していることですが、解決できない警告が表示されています。ありがとう!

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

int main()
{
    int* y;
    printf("%p\n",y);
    printf("%x\n",&y);
    y = (int*)malloc(sizeof(int));
    printf("%p\n",y);
    printf("%x\n",&y);
    return 0;
}

コンパイルの警告:

Warning: format ‘%x’ expects argument of type ‘unsigned int’,
    but argument 2 has type ‘int **’ 

Output:
0xb773fff4
bfa3594c
0x8361008
bfa3594c
4

2 に答える 2

4

あなたの2番目はフォーマットprintf()を取り、"%p\n"厳密にキャストする必要があります:

printf("%p\n", (void *)&y);

キャストが実際に何かを変えるマシンの数はかなり限られています。

于 2012-12-06T03:50:23.490 に答える
-1

Visual Studio 2012では、コードは警告やエラーなしでコンパイルされるようです。

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

    int _tmain(int argc, _TCHAR* argv[])
    {
        int* y = 0;
        printf("%p\n",y);
        printf("%x",&y);
        y = (int*)malloc(sizeof(int));
        printf("%p\n", y);
        printf("%x",  &y);

        return 0;
    }

唯一の推奨事項は、宣言するときにyを初期化することです。

于 2012-12-06T03:55:54.903 に答える