2

以下は、サイドコメントの2つの質問に対する答えを知りたいコードです。私を助けてください

#include<iostream>

using namespace std;

int main()
{
    char *p="Hello";
    cout <<*p;     //gives H
    cout <<*(p++); //also gives H.Why?
    cout <<*(p++); //gives e.
    cout <<*(p++); //gives l.
    cout <<*(p++); //gives l.
    cout <<*(p++); //gives o.
    cout <<*(p++); //gives no output.Why? It should give some garbage value!
}
4

8 に答える 8

0

これを行う:

{
    char *p="Hello";
    cout <<*p;     //gives H.
    cout <<*(++p); //gives e.
    cout <<*(++p); //gives l.
    cout <<*(++p); //gives l.
    cout <<*(++p); //gives o.
    cout <<*(++p); //gives 0.
    cout <<*(++p); //will either be a garbage value or throw an exception
}

++p はポインタをインクリメントし、値を返します。p++ はスタックに値をプッシュし、ポインターをインクリメントし、スタックをポップしてそれを返します。レジスタを使用することもあります。実装の詳細は、コンパイラ次第です。

于 2013-07-25T06:21:00.163 に答える