Semasa latihan, anda dikehendaki menulis fungsi perbandingan tatasusunan
#include "iostream" using namespace std; int isEqual(int a[], int b[]) { int length_a = sizeof(a) / sizeof(a[0]); int length_b = sizeof(b) / sizeof(b[0]); if (length_a != length_b) { return 200; } else { for (int i = 0; i < length_a; i++) { if (a[i] != b[i]) { return 200; } } return 30; } } int main() { int arr1[4] = { 1,2,3,5 }; int arr2[3] = { 1,2,3 }; int flag = isEqual(arr1, arr2); cout << flag << endl; return 0; }
Tidak kira bagaimana nilai dua tatasusunan diubah, hasil keluaran fungsi ini tetap tidak berubah Apakah sebabnya? ...Terima kasih~
Dalam hantaran parameter fungsi, tatasusunan dihantar ke dalam fungsi dalam bentuk penunjuk, dan tidak akan ada panggilan mengikut nilai. Dalam parameter fungsi, int arr[4] akan merosot menjadi int *, dan 4 akan hilang, jadi a dalam fungsi isEqual sebenarnya hanyalah alamat pertama tatasusunan a.
Jika anda ingin menghantar penunjuk tatasusunan dan saiz tatasusunan pada masa yang sama, anda perlu menggunakan panjang tatasusunan sebagai parameter formal fungsi yang lain:
Contohnya:
Sebab anda tersalah mengira panjang dua tatasusunan