Rumah > pembangunan bahagian belakang > C++ > Adakah 2[arr] = 5 Menyusun dan Lulus Penegasan dalam C dan C ?

Adakah 2[arr] = 5 Menyusun dan Lulus Penegasan dalam C dan C ?

Mary-Kate Olsen
Lepaskan: 2024-12-03 07:17:10
asal
291 orang telah melayarinya

Does 2[arr] = 5 Compile and Pass Assertion in C and C  ?

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?
Salin selepas log masuk

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:

  • Satu ungkapan jenis penunjuk-ke-objek
  • Satu ungkapan jenis integer
  • Ungkapan terhasil daripada jenis yang sama dengan objek

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:

  • E1 ditukar kepada penunjuk kepada elemen awal tatasusunan.
  • E2 ditambah kepada penuding, menghasilkan penuding baharu yang menghala ke elemen E2-th tatasusunan.
  • Membatalkan rujukan yang terhasil penunjuk mengembalikan nilai elemen tatasusunan yang dipilih.

Yang penting, tiada keperluan dalam piawaian bahawa susunan hujah menjadi [] adalah waras. Oleh itu, ungkapan 2[arr] dianggap bersamaan dengan (*((2) (arr))).

  • 2, integer, ditambah pada penunjuk yang menunjuk kepada elemen pertama bagi arr.
  • Penunjuk yang terhasil menghala ke elemen ketiga arr.
  • Membatalkan penuding yang terhasil (iaitu, mengakses arr[2]) memberikan nilai 5 kepada elemen ketiga.

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan