Mengakses Tatasusunan mengikut Indeks[array] dalam C dan C
Dalam ujian pengetahuan yang kadangkala dikemukakan oleh penemuduga, kod berikut dibentangkan:
int arr[] = {1, 2, 3}; 2[arr] = 5; // does this line compile? assert(arr[2] == 5); // does this assertion fail?
Mungkin pada mulanya ungkapan 2[arr] gagal dihimpun, kerana ia kelihatan seperti cuba mengindeks tatasusunan menggunakan integer sebagai nama tatasusunan. Walau bagaimanapun, sintaks yang tidak dijangka ini sememangnya sah dalam kedua-dua C dan C .
Untuk memahami sebabnya, mari kita mendalami teknikal operator [] dalam bahasa ini.
C dan C Semantik Akses Tatasusunan
Mengikut standard C99 (6.5.2.1 perenggan 1), pengendali [] mengharapkan hujah dalam bentuk:
Selanjutnya, perenggan 2 bahagian yang sama menerangkan bahawa E1[E2] bersamaan dengan (*((E1) (E2))). Ini menunjukkan bahawa ungkapan E1[E2] boleh ditafsirkan sebagai manipulasi penunjuk:
Yang penting, tiada keperluan dalam piawaian bahawa susunan hujah menjadi [] adalah waras. Oleh itu, ungkapan 2[arr] dianggap bersamaan dengan (*((2) (arr))).
Oleh itu, kedua-dua tugasan dan penegasan seterusnya berjaya, seperti yang dijangkakan.
Atas ialah kandungan terperinci Adakah 2[arr] = 5 Menyusun dan Lulus Penegasan dalam C dan C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!