2016-05-17 15 views
-1

以下のコードが機能しない理由を理解しようとしています。関数へのポインタ参照をプッシュし、そのアドレスの値を他の新しい値に変更しようとしています。最初のポインタは新しい文字列を指しています。問題は、なぜこれはダブルポインタ引数でのみ動作するのですか?単一ポインタへの引数としてのポインタへの参照

#include <stdio.h> 


char new_str[] = "This is a new string"; 


int change_ptr(char * str_ptr) 
{ 
    *str_ptr = new_str; 
} 


int main() 
{ 
    char * a_str = "Hello"; 

    change_ptr(&a_str); 


    return 0; 
} 
+1

'&a_str'のタイプがchar **'と '&a_str'パッシングされていない'です次の変数のアドレスを渡しています。 –

+2

コンパイラのメッセージを読む –

+0

1つは、 'change_ptr'関数でパラメータが' char ** 'であることを必要とするアドレスの('& ')です。 – t0mm13b

答えて

1

単純にポインタを渡すと、そのポインタのデータが変更されます。そのデータの場所を変更するには、ポインタへのポインタを使用する必要があります。

-Wallフラグを付けてコンパイルした場合、このエラーが発生します。常にコンパイラの警告を有効にします。あなたのケースでは

、あなたはパラメータがポインタへのポインタであるように、あなたの関数を宣言する必要があります:

int change_ptr(char ** str_ptr) 
{ 
    *str_ptr = new_str; 
} 
+0

彼はポインタへのポインタを渡しました - 問題は、彼が渡している関数がポインタだけを期待しているということです。 – Alnitak

+0

@Alnitakそうです。私は今までそれを捕まえていませんでした。 – Linus

関連する問題