您能否通过执行以下C代码来解释为什么会输出:'dcc d'?(指针)

Mangomeri

根据以下代码我的输出是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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章