2012-05-08 20 views
-7
int main() { 
    // int arr[2][2] = { {1,2}, {3,4}}; 
    int a[] = {1,2}; 
    int b[] = {3,4}; 
    int (*ptr)[2]; 

    // assign ptr to arr 
    //ptr = arr; 
    ptr = (int (*)[2])malloc (2*sizeof(int)); 
    ptr = &a; 
    (ptr+1) = b; // error here 
    printf("%3d %3d", ptr[0][1], ptr[1][1]) ; 
} 

私は(ptr + 1)assgin配列を手伝ってください。おかげさまで 配列へのポインタ

答えて

2

ptrはint配列(int[2])へのポインタですが、このようmallocメモリアドレスを上書き、同じ変数に割り当てることによって、メモリをリークし、間違ったサイズをmalloc、および。私はあなたがそれをしたいと仮定します。

int (**ptr)[2]; 
ptr = malloc (2*sizeof(int(*)[2])); 
ptr[0] = &a; 
ptr[1] = &b; 
+0

ptrは、int配列(int [2])相当の2次元配列(ptr = arr)へのポインタです。 Beause、私は(ptr + 1)が配列へのポインタになると思います。助けてください、ここでエラーを説明してください。ありがとう。 –

+0

'pointer!= array'あ​​なたが' malloc'で行った割り当ては、2-ints配列ではなく2-ints配列を作るための割り当てでした。 – MByD

0

全コード:

#include <stdlib.h> 
#include <stdio.h> 

int main() { 
    int a[] = {1,2}; 
    int b[] = {3,4}; 
    int **ptr; 

    ptr = (int **) malloc(sizeof(int *) * 2); 

    ptr[0] = a; 
    ptr[1] = b; 
    printf("%3d %3d\n", ptr[0][1], ptr[1][1]); 
    free(ptr); 
} 

は、a、bは、すでに(整数)はポインタであるため、PTRポインタ(**)へのポインタです。

0

あなたは、配列へのポインタの配列ではなくポインタを使用する必要があります。

int main() 
{ 
    int a[] = {1,2}; 
    int b[] = {3,4}; 
    int *ptr[2] = { a, b }; 

    printf("%3d %3d", ptr[0][1], ptr[1][1]) ; 

    return 0; 
} 
0

あなたはこのようにをmallocすることができます。

#include <stdlib.h> 
#include <stdio.h> 

int main(int argc, char *argv[]) { 
    int i; 
    int a[] = {1,2}; 
    int b[] = {3,4}; 
    int *ptr[2]; //same as ptr[2][??] 

    ptr[0] = (int *) malloc(sizeof(int*) * 2); //malloc ptr[0] >> 2 * sizeof int 
    ptr[1] = (int *) malloc(sizeof(int*) * 5); //malloc ptr[1] >> 5 * sizeof int 

    /* so we get ptr[0][2] and ptr[1][5]*/ 

    /* SET VALUE */ 
    for(i = 0; i < 2; i++) 
    ptr[0][i] = i; 
    for(i = 0; i < 5; i++) 
    ptr[1][i] = i; 


    /* PRINT VALUE */ 
    for(i = 0; i < 2; i++) 
     printf("ptr[0][%03d] = %03d\n", i, ptr[0][i]); 

    printf("\n"); 

    for(i = 0; i < 5; i++) 
     printf("ptr[1][%03d] = %03d\n", i, ptr[1][i]); 


    /* FREE POINTER */ 
    free(ptr[0]); 
    free(ptr[1]); 

    return 0; 
} 
関連する問題