Tugas melibatkan menerima tatasusunan sebagai input kepada fungsi, mengekstrak data daripadanya, dan menjana tatasusunan baharu sebagai output. Walaupun nampaknya mudah, C memperkenalkan kerumitan tertentu pada operasi ini.
Pertama sekali, adalah penting untuk ambil perhatian bahawa tidak mungkin untuk mengembalikan tatasusunan terbina dalam C . Sifat tetap dan berkod keras menghalang mereka daripada dianggap sebagai objek yang boleh disebarkan. Ini boleh mengelirukan bagi pengaturcara yang terbiasa dengan bahasa lain.
Untuk memintas pengehadan ini, pertimbangkan pendekatan berikut:
Berikut ialah coretan kod ilustrasi yang mempamerkan kedua-dua pendekatan:
// STL Vector Example std::vector<int> myfunction(const std::vector<int>& my_array) { std::vector<int> f_array(my_array); // Data manipulation... return f_array; } // Boost Array Example boost::array<int, 2> myfunction(const boost::array<int, 2>& my_array) { boost::array<int, 2> f_array; f_array[0] = my_array[0]; f_array[1] = my_array[1]; // Data manipulation... return f_array; }
Contoh ini menggunakan pembina vektor STL dan fungsi ahli tatasusunan Boost untuk memudahkan proses penyalinan data.
Satu perkara tambahan yang perlu diberi perhatian ialah pepijat dalam kod asal yang disediakan:
int myfunction(int my_array[1])
Walaupun mengisytiharkan my_array dengan satu elemen , kod cuba mengakses dua elemen (my_array[0] dan my_array[1]). Ini ialah ralat luar sempadan indeks klasik. Pengisytiharan yang sesuai hendaklah:
int myfunction(int my_array[2])
Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Tatasusunan Baharu daripada Fungsi dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!