2016-09-02 16 views
-4
#include <stdio.h> 

int main(int argc, char **argv) { 
    // your code goes here 
    char *p; 
    p = "hello"; 

    printf("%s",*&*&p); 
    return 0; 
} 

p,*&p,*&*&pの出力が同じです。これはどのように可能ですか?私のCコードはpのすべての入力に対して同じ出力を与えますか?

+0

代わりに何を期待していますか? –

+0

pの値はどうやってこんにちは。 p店舗住所。 –

+0

いくつか私はこのコードのステップバイステップの作業を説明することができますか? –

答えて

0

*手段は「hello」という文字列を指すポインタであるPのアドレスの値になります。
&は、このオブジェクトのメモリアドレスを示します。

したがって、
pは、文字列helloが始まるアドレスです。
*&pは、pの場所にあるもの(つまり、helloが始まるアドレス)を教えてください。
*&*&p手段は、だから、すべてのそれらのあなたにpを与える

P

の位置にある場所である何私を与えます。

+0

しかし、Pは値を格納することはできません、それはアドレスでなければなりません? –

+0

したがって、 'p'に格納されたアドレスは' printf'に送られ、 'printf'はp = 20とprintf("%d ")を与えるときに' \ 0' – Riley

+0

となるまでそのアドレスの文字の印字を開始します。 、* &*&p);これは正しく動作しません。 –

1

pは、文字列 "hello"を指すポインタです。 &のpは、pのアドレスである、だから、* & pは再びメモリ内のこの場所にあるものは何でも与え

+0

ok then char p = "hello"; printf( "%s"、p);それはエラーを出力しますが、char * p; p = "hello"; printf( "%s"、p); hello –

+0

を出力します。char pはpが文字列ではなく、文字であることを意味します。 char * pは、pが文字列へのポインタであることを意味します。理解のため、http://stackoverflow.com/a/2938924/4183255を参照してください。 –

+0

それは視覚化した後には本当に役に立ちました。それは私が探していたものです。どうもありがとう。 :) –

関連する問題