Inilah yang saya temukan selama masa belajar saya:
#include<iostream>
using namespace std;
int dis(char a[1])
{
int length = strlen(a);
char c = a[2];
return length;
}
int main()
{
char b[4] = "abc";
int c = dis(b);
cout << c;
return 0;
}
Jadi dalam variabel int dis(char a[1]), [1]sepertinya tidak melakukan apa-apa dan tidak berfungsi sama
sekali, karena saya dapat menggunakan a[2]. Hanya suka int a[]atau char *a. Saya tahu nama array adalah pointer dan cara menyampaikan array, jadi teka-teki saya bukan tentang bagian ini.
Yang ingin saya ketahui adalah mengapa kompiler mengizinkan perilaku ini ( int a[1]). Atau apakah ada makna lain yang tidak saya ketahui?
typedeftipe array. Jadi "pembusukan untuk pointer" di jenis argumen bukan hanya gula sintaksis mengganti []dengan *, itu benar-benar akan melalui sistem jenis. Ini memiliki konsekuensi dunia nyata untuk beberapa tipe standar seperti va_listyang dapat didefinisikan dengan tipe array atau non-array.
int dis(char (*a)[1]). Kemudian, Anda melewati pointer ke array: dis(&b). Jika Anda bersedia menggunakan fitur C yang tidak ada di C ++, Anda juga bisa mengatakan hal-hal seperti void foo(int data[static 256])dan int bar(double matrix[*][*]), tetapi itu adalah kaleng cacing lainnya.