1. Parameter fungsi prinf mengandungi ungkapan penunjuk dalam susunan yang manakah hasil operasi kod itu jelas bukan dari kiri ke kanan.
#include <stdio.h>
int main() {
int a[5] = { 1,2,3,4,5 };
int *p = a;
printf("%d\n", *p);
printf("%d %d %d %d\n", *(++p)++,*p, *p++, *p);
getchar();
return 0;
}
Menukar pembolehubah berbilang kali dalam satu pernyataan adalah tingkah laku yang tidak ditentukan dan mungkin mempunyai hasil yang berbeza pada platform yang berbeza. Soalan ini tidak masuk akal.
printf{"%d",++i}
bermaksud dua operasiMula-mula laksanakan i=i+1, kemudian keluarkan i
Dan i++ bermaksud
Output pertama, kemudian laksanakan i=i+1
Susunan operasi parameter fungsi mempunyai sedikit kaitan dengan logik dalaman fungsi Ia perlu dikira sebelum ditolak ke tindanan (sebelum fungsi dilaksanakan)
++p
,函数结束后,再计算p++
. Jika anda ingin mengetahui urutan tertentu, anda boleh merujuk kepada kod pemasangan (maksud khusus akan dikemas kini esok, maaf)Digression:
Saya berada dalam persekitaran2 dan 3 yang muncul dalam keputusan masih boleh dijelaskan.
4 Sangat pelik Jika saya terpaksa menerangkannya dengan berat hati,
++
di luar kurungan*(++p)++
juga bermaksudp Ia berfungsi,
*(++p)++
括号外面的++
也对p
起作用了,但是形如
p++
运算符,应该在语句结束后才自增的,所以这样解释明显不对。我在
Cygwin + gcc (GCC) 5.4.0
Tetapi operator dalam bentukp++
harus ditambah selepas penyataan tamat, jadi penjelasan ini jelas salah.Cygwin + gcc (GCC) 5.4.0
Keputusan yang dijalankan adalah seperti berikut. 🎜 rrreeeTertib di mana parameter fungsi ditolak ke tindanan adalah pasti, cuma
参数的求值顺序是未指定
的,编译器只保证在
printf
调用之前,所有参数的值是已知的这方面的资料可以搜索
序列点(Sequence Point)