根据以下代码我的输出是d c b a
,但这是错误的。为什么?
char xc[4] = {'a', 'b', 'c', 'd'};
char *xp[4];
int i;
for (i = 0; i < 4; i++) {
xp[i] = &xc[i];
}
for (i = 0; i < 4; i++) {
*xp[i] = *xp[3-i];
}
printf("%c %c %c %c", xc[0], xc[1], xc[2], xc[3]);
循序渐进地进行操作。
您的代码等同于
char xc[4] = {'a', 'b', 'c', 'd'};
int i;
for (i = 0; i < 4; i++) {
xc[i] = xc[3-i];
}
printf("%c %c %c %c", xc[0], xc[1], xc[2], xc[3]);
然后,跟踪是
i statement xc[0] xc[1] xc[2] xc[3]
(before loop) 'a' 'b' 'c' 'd'
0 xc[0]=xc[3] 'd' 'b' 'c' 'd'
1 xc[1]=xc[2] 'd' 'c' 'c' 'd'
2 xc[2]=xc[1] 'd' 'c' 'c' 'd'
3 xc[3]=xc[0] 'd' 'c' 'c' 'd'
您应该使用一个时间变量,并注意两次交换同一对以反转数组。
char xc[4] = {'a', 'b', 'c', 'd'};
char *xp[4];
int i;
for (i = 0; i < 4; i++) {
xp[i] = &xc[i];
}
for (i = 0; i < 3-i; i++) {
char t = *xp[i];
*xp[i] = *xp[3-i];
*xp[3-i] = t;
}
printf("%c %c %c %c", xc[0], xc[1], xc[2], xc[3]);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句