Cステップ3:2 Dポインタ

2769 ワード

1.2 Dポインタとは
2 Dポインタは、1 Dポインタと同様にアドレスを保存する変数です.
  • 例1
  • #include 
    int main(){
        int n=0,m=0;
        printf("&n=%p
    ",&n); printf("&m=%p
    ",&m); int* p = NULL; int** pp = &p; scanf("%p",pp); scanf("%d",p); printf("n=%d
    m=%d
    ",n,m); }

    1 Dポインタは変数アドレスを格納し、2 Dポインタは1 Dポインタアドレスを格納します.
  • 例2
  • #include 
        
    int main(){
        
        //          
        int arr[6] ={1,2,3,4,5,6};
        int* p = arr;
        for(int i=0;i<6;++i){
            printf("%d
    ",p[i]); } // int arr2[6] ={7,8,9,10,11,12}; int* parr[] = {arr,arr2}; int** pp = parr; for(int i=0;i<2;++i){ for(int j=0;j<6;++j){ printf("%d ",pp[i][j]); } printf("
    "); } }

    1 Dポインタは配列アドレスを格納し、2 Dポインタはポインタ配列アドレスを格納します.
    2.2 Dポインタの使い方
    1.関数パラメータとして2 Dポインタ
  • 入力1次元ポインタアドレス入力1次元ポインタアドレスは、関数内部の申請の動的メモリを取り出すことができる.単一変数
  • を取り出すことができる.
    #include 
    #include 
    
    void Func(int** pp){
        int* p = malloc(sizeof(int));
        *p = 100;
        *pp = p;
        printf("&p=%p\tp=%p\t*p=%d
    ",&p,p,*p); } int main(){ int* p = NULL; Func(&p); printf("&p=%p\tp=%p\t*p=%d
    ",&p,p,*p); free(p); p = NULL; }

    配列を取り出すこともできます
    #include 
    #include 
        
    void PrintArray(int* arr,int n){
        for(int i=0;i
  • 入力ポインタ配列アドレス
  • #include 
        
    void PrintStrings(const char** strs,int n){
        for(int i=0;i

    2.2 Dポインタを関数として返す値
    2 Dポインタは、通常、ポインタ配列の戻り値タイプとして使用されます.例:m*nの単位行列の作成
    #include 
    #include 
    
    int** CreateIdentityMatrix(int r,int c){
        int** pm = (int**)malloc(sizeof(int*)*r);
        for(int i=0;i

    3.練習
  • は、2つの文字列の値を交換する関数swapString()を実装する.
  • は、関数swapArray()を実装し、2つの配列の値を交換する.
  • は、関数入力正数nを実現し、デルタシンボル画像文字列配列を返す.例えば、n=4
  • *
    **
    ***
    ****
    
  • は、関数入力正数nとmを実現し、n~m行のランダム行のランダム列のアスタリスク画像文字列配列を返す.例えば、n=4、m=9
  • ****
    ******
    **********
    ****
    ********
    ******