gpt4 book ai didi

您能解释一下为什么执行以下 C 代码会输出 :'d c c d' 吗?(指针)

转载 作者:行者123 更新时间:2023-11-30 21:33:05 25 4
gpt4 key购买 nike

我按照下面的代码输出是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]);

关于您能解释一下为什么执行以下 C 代码会输出 :'d c c d' 吗?(指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36054364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com