2016-04-26 4 views
-2

私はポインタが変数のメモリアドレスを指すのに使用されることを理解します。私が間違っていれば私を訂正してください、ポインタはそれ自身のメモリアドレスも持っていませんか?基本的に同じ値を持つ別の変数を作成していませんか?変数を指すポインタを作成する必要があるときに、ポインタがメモリを節約するのはなぜですか?

ポインタには独自のメモリアドレスもありませんか? ポインタがより効率的になり、ポインタが本当に便利な例は何でしょうか?本当にありがとう。

+5

待ち、Pythonは実際にポインタを持っていますか?とにかく、あなたは4つの異なるプログラミング言語にタグをつけました。それぞれのプログラミング言語には、ポインタがあればそれ自身で使用されます(もしあれば)。あなたは1つを選択する必要があります。また、「効率的」を定義する:どのような意味で、何に比べて? –

+4

なぜポインターの目的がメモリーを節約していると思いますか? –

+0

次回は違うようにしています。私は、どのようにポインタがより効率的なメモリを意味するのかを意味しました。 – Scottytwotime

答えて

1

ポインタは、大きなデータブロックまたは大きな構造体を指しているときに、より効率的です。通常4または8バイトのアドレスを渡すと、メガバイトまたはギガバイトの潜在的なデータではなく、スタック上の単純なコピーとなります。

実際には、ポインタが指している値よりも多くのデータが存在する可能性があります。たとえば、64ビットシステムで

int x = 1; 
int *y = &x; 

yは、4バイトのデータを指し、実際には8バイトです。

3

はい、ポインタは独自のメモリアドレスを持ち、いくらかの領域を占有します。

しかし、6つのオブジェクト、つまり1つのオブジェクトと5つのポインタの間に選択肢がある場合は、より効率的だと思いますか?

は、ここに例を示します

struct bigStruct 
{ 
    char message[1024]; 
}; 

void printBigStructDirectly(struct bigStruct s) 
{ 
    // When you call this, the computer makes a copy of bigStruct. 
    // Now both "s", and "bs" in the caller, take up 1024 bytes each, 
    // so 2048 bytes total. 
    printf("%s\n", s.message); 
} 

void printBigStructWithPointer(struct bigStruct *ps) 
{ 
    // When you call this, the computer only makes a pointer variable. 
    // Now "bs" in the caller takes up 1024 bytes, and "ps" here 
    // takes 4 or 8 bytes, so 1028 or 1032 bytes total. 
    printf("%s\n", ps->message); 
} 

void test(void) 
{ 
    struct bigStruct bs; 
    strcpy(bs.message, "Hello world!"); 
    printBigStructDirectly(bs); 
    printBigStructWithPointer(&bs); 
} 
+1

質問のpython、java、およびC++部分に対処するのを忘れました。 :/ –

+0

いいえ、私は忘れませんでした。質問にはポインタが含まれ、すべての言語に適用できます。 – Scottytwotime

+0

あなたの答えをお返事ありがとうございます – Scottytwotime

関連する問題