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?
typedef
tipe 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_list
yang 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.