ダブルポインタについて理解するのは簡単

コードを実行します。

1の#include <iostreamの>
 2   
3  ボイド GetMemeory(チャー *のP)
 4  {
 5      P =(CHAR *)のmalloc100 )。
6  }
 7  ボイド試験()
 8  {
 9      のchar * STR = NULLを。
10      GetMemeory(STR)。
11      strcpyの(STR、" サンダー" )。
12      STRCAT(STR + 2" ダウンローダ" )。
13     printf(STR)。
14 }

業績

プログラムがクラッシュ

プログラム説明しました

まず、関数を値渡し、そうpおよびSTR点同じNULLです。

GetMemory機能が完了し、宇宙用のメモリ空間を増加させたが、それでもNULLををstrを指すのpによって指されます。

引数を変更するには、引数のアドレスを渡す必要があるため、二つのポインタを渡す必要があり、以下のように変更します:

1  空隙 GetMemory(チャー ** P){
 2      * P =(CHAR *)のmalloc100 )。
3  }
 4   
5  ボイド試験(){
 6      のchar * STR = NULL;
7      GetMemory(&STR)。
8      strcpyの(STR、" サンダー" )。
9      STRCAT(STR + 2" ダウンローダ" )。
10      のprintf(STR)。
11 }

 

 

おすすめ

転載: www.cnblogs.com/sxf1061700625/p/11320134.html