0

コード:

#include <cstdlib>
#include <iostream>
#define PI 3.14159

using namespace std;

int main(int argc, char** argv) {    
    cout<<"Address of PI:"<<&PI<<endl;    
    return 0;
}

出力は次のとおりです。

main.cpp:関数int main(int, char**)': main.cpp:20: error: non-lvalue in unary内&'make [2]:* [build / Debug / Cygwin-Windows/main.o]エラー1make[1]:[.build-conf]エラー2make: **[.build-impl]エラー2

では、なぜここでPIのメモリアドレスを確認できないのでしょうか。

ありがとうございました。

4

4 に答える 4

4

マクロにメモリが割り当てられることはありません。コードをコンパイルする前に、コンパイラはファイル内でテキスト検索を実行し、すべてのマクロをそれらの値に置き換えます。また、これはテキスト検索であるため、テキストが置き換えられます。したがって、PIは、コンパイルする前にコード内で3.14に置き換えられます。その結果、メモリオペレーターは、変数ではないため3.14の値を取得できないため、エラーをスローします。それが役に立てば幸い :)

于 2012-11-23T21:55:29.030 に答える
3

数値リテラルのアドレスを取得することはできません。ただし、変数の場合は次のようになります。

// #define PI 3.14159
static const double PI = 3.14159;
于 2012-11-23T20:55:03.713 に答える
3

あなたのコードでPIは、メモリアドレスがありません。これはプリプロセッサマクロであるため、その値はPIプログラムのどこにでも置換されます。

それを変数に変換すると、そのアドレスを取得できるようになります。

const double PI = 3.1415926;
于 2012-11-23T20:56:01.577 に答える
1

プリプロセッサは、コード内のあらゆる場所に置き換えPIられ3.14159ます。したがって、番号はメモリに存在しません。

于 2012-11-23T20:56:02.157 に答える