Mendefinisikan array tidak beraturan 2D dengan malloc

Saya punya soal latihan ini:

Definisikan array tak beraturan 2D dengan malloc int di mana bagian luar redup = 4 dan bagian dalam = 10,11,12,13. (petunjuk: gunakan perulangan for)

Jadi, saya menyadari bahwa saya bisa menulis array tidak beraturan 2D dengan malloc int seperti ini:

int (*array)[20] = malloc((ukuran *array) * 10);

Itu untuk array 10x20 yang saya yakini dengan amlloc.

Saya hanya tidak yakin bagaimana saya akan menggunakan loop for untuk mengubah dimensi bagian dalam dari 10 menjadi 11 menjadi 12 menjadi 13. Bantuan apa pun akan sangat kami hargai, terima kasih!

int j;

for (int k = 0; k < 4; k++ )
{
    for ( j = 10; j < 14; j++ )
    {
        int (*array)[4] = malloc((sizeof *array) * j)
    }
}

Ngomong-ngomong, apakah itu hampir benar?


person user3234203    schedule 25.01.2014    source sumber
comment
Tambahkan 1 ke nilai akhir perulangan for dalam setiap kali Anda melakukan satu eksekusi perulangan for luar.   -  person Robert Harvey    schedule 25.01.2014
comment
Apakah yang saya tambahkan hampir benar?   -  person user3234203    schedule 25.01.2014
comment
Ya, Anda hanya memerlukan sesuatu seperti j < 10 + k di for kedua. Lihat cara kerjanya?   -  person Robert Harvey    schedule 25.01.2014
comment
Untuk beberapa alasan, saya mendapatkan kesalahan di malloc. Dikatakan nilai bertipe void tidak dapat digunakan untuk menginisialisasi entitas bertipe int int(*)[4]   -  person user3234203    schedule 25.01.2014
comment
Apakah berhasil sebelum Anda melakukan perubahan yang saya sarankan?   -  person Robert Harvey    schedule 25.01.2014
comment
Tidak terlalu. Itu memiliki kesalahan yang sama kedua kali.   -  person user3234203    schedule 25.01.2014
comment
Oke, seseorang yang memiliki pengetahuan C lebih baik daripada saya harus membantu Anda memperbaiki malloc itu.   -  person Robert Harvey    schedule 25.01.2014


Jawaban (1)


Apakah ini membantu? Jika ya, harap edit http://en.wikibooks.org/wiki/C_Programming/Common_practices#Dynamic_multidimensional_arrays untuk memudahkan pemahaman siswa selanjutnya.

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

const int rows = 20;

int main(void) {
    int **some_data;
    // first, allocate a (column) Iliffe vector.
    some_data = malloc( (sizeof(*some_data)) * rows);
    int i=0;
    for(i = 0; i < rows; i++){
        // next, allocate each row.
        // For no good reason, make each row a different size.
        int columns = i+10;
        some_data[i] = malloc( (sizeof(**some_data)) * columns);
    };
    some_data[3][13] = 9;
    printf( "%d\n", some_data[3][13]);
    return 0;
}

Jika Anda melihat ini melalui salah satu sistem terkunci yang tampaknya sangat populer saat ini, Anda mungkin merasa nyaman untuk menjalankan kode di atas di beberapa kompiler C online seperti http://ideone.com/ atau http://codepad.org/ atau http://www.compileonline.com/compile_c_online.php .

person David Cary    schedule 25.01.2014